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

Bri*_* Oh 14 go

使用Go我试图找到将浮点数格式化为字符串的"最佳"方法.我找了一些例子但是找不到任何具体回答我的问题的东西.我想要做的就是使用"最佳"方法将浮点数格式化为字符串.小数位数可能会有所不同,但是已知(例如,2或4或零).我想要实现的一个例子如下.根据下面的例子,我应该使用fmt.Sprintf()或strconv.FormatFloat()还是其他什么?并且,每个的正常用法和每个之间的差异是什么?

我也不明白在下面使用32或64当前有32的重要性:

strconv.FormatFloat(float64(fResult), 'f', 2, 32)
Run Code Online (Sandbox Code Playgroud)

例:

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)

}
Run Code Online (Sandbox Code Playgroud)

Jam*_*dge 16

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

如果数字应格式化的精度是可变的,那么它可能更容易使用FormatFloat,因为它避免了像你一样构造格式字符串的需要Sprintf.如果它永远不会改变,那么你可以使用其中之一.

FormatFloat控制值如何舍入的最后一个参数.从文档:

假设原始是从bitSize位的浮点值获得的(对于float32为32,对于float64为64),它会舍入结果

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