繁体   English   中英

将 float64 转换为字符串而不更改其在 GO 中的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM