[英]Converts float64 to string without changing its value in GO
我正在尝试将 float64 中的大值转换为字符串,但结果与我的预期不同。
package main
import (
"fmt"
)
func main() {
var myNum float64 = 250000000000000000000000000
myNumStr := fmt.Sprintf("%.f", myNum)
expected := "250000000000000000000000000"
fmt.Printf("expected: %v\n", expected)
fmt.Printf("got: %v\n", myNumStr)
}
上面的代码显示了这个结果: 250000000000000003321888768 这与myNum
的实际值不同,有没有办法解决它?
对于浮点数来说,这实际上是很正常的行为。 这并不特定于 Go 顺便说一句,它发生在任何计算语言中。 请参阅https://floating-point-gui.de/以获得有关计算机中浮点数的出色描述和参考。
如果您真的需要绝对精度,最好使用 math.big package 中的 Float。 然而,对于大多数应用程序,打印精确到小数点后 8 位的数字就足够了。 您可以通过 %f 动词来完成此操作:(请注意,我使用的是float64
变量而不是string
变量)
fmt.Printf("got: %.8f\n", myNum)
... 或者像这样的 16 个地方:
fmt.Printf("got: %.16f\n", myNum)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.