使用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.Sprintf并strconv.FormatFloat用被子底下相同字符串格式化程序,所以应该给予同样的结果.
如果数字应格式化的精度是可变的,那么它可能更容易使用FormatFloat,因为它避免了像你一样构造格式字符串的需要Sprintf.如果它永远不会改变,那么你可以使用其中之一.
FormatFloat控制值如何舍入的最后一个参数.从文档:
假设原始是从bitSize位的浮点值获得的(对于float32为32,对于float64为64),它会舍入结果
因此,如果您正在使用float32示例代码中的值,那么传递32是正确的.