我正在尝试使用Go来找到“最佳”的方式来将浮点数格式化为字符串。我一直在寻找示例,但是找不到任何可以具体回答我所遇到问题的东西。我要做的就是使用“最佳”方法将浮点数格式化为字符串。小数位数可能会有所不同,但会知道(例如2或4或零)。下面是我要实现的示例。
根据以下示例,我应该使用fmt.Sprintf()还是strconv.FormatFloat()或其他方式?
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) }
两者fmt.Sprintf并strconv.FormatFloat用相同的字符串被窝里格式化程序,所以应该给予同样的结果。
fmt.Sprintf
strconv.FormatFloat
如果将数字格式化的精度是可变的,则使用起来可能会更容易FormatFloat,因为它避免了像那样构造格式字符串的需要Sprintf。如果它永远不会改变,那么您可以使用其中任何一个。
FormatFloat
Sprintf
最后一个参数FormatFloat控制值的取整方式。从文档中:
假设原始结果是从bitSize位的浮点值(float32为32,float64为64)获得的,则四舍五入结果
因此,如果您float32像示例代码中那样使用值,那么传递32是正确的。
float32
32