一尘不染

如何使用Go将浮点数格式化为字符串

go

我正在尝试使用Go来找到“最佳”的方式来将浮点数格式化为字符串。我一直在寻找示例,但是找不到任何可以具体回答我所遇到问题的东西。我要做的就是使用“最佳”方法将浮点数格式化为字符串。小数位数可能会有所不同,但会知道(例如2或4或零)。下面是我要实现的示例。

根据以下示例,我应该使用fmt.Sprintf()还是strconv.FormatFloat()或其他方式?

而且,每种的正常用法是什么?

我也不理解在以下当前使用32的情况下使用32或64的重要性:

strconv.FormatFloat(float64(fResult), 'f', 2, 32)

例:

package main

import (
    "fmt"
    "strconv"
)

func main() {

    var (
        fAmt1 float32 = 999.99
        fAmt2 float32 = 222.22
    )

    var fResult float32 = float32(int32(fAmt1*100) + int32(fAmt2*100)) / 100

    var sResult1 string = fmt.Sprintf("%.2f", fResult)

    println("Sprintf value = " + sResult1)

    var sResult2 string = strconv.FormatFloat(float64(fResult), 'f', 2, 32)

    println("FormatFloat value = " + sResult2)

}

阅读 677

收藏
2020-07-02

共1个答案

一尘不染

两者fmt.Sprintfstrconv.FormatFloat用相同的字符串被窝里格式化程序,所以应该给予同样的结果。

如果将数字格式化的精度是可变的,则使用起来可能会更容易FormatFloat,因为它避免了像那样构造格式字符串的需要Sprintf。如果它永远不会改变,那么您可以使用其中任何一个。

最后一个参数FormatFloat控制值的取整方式。从文档中:

假设原始结果是从bitSize位的浮点值(float32为32,float64为64)获得的,则四舍五入结果

因此,如果您float32像示例代码中那样使用值,那么传递32是正确的。

2020-07-02