正在运行:
package main
import (
"fmt"
"math/big"
)
func main() {
a := big.NewFloat(float64(2.1234))
fmt.Println(a.Text(102,18))
}
我期望输出2.123400000000000000,但得到2.123400000000000176。
有人可以向我解释为什么我没有预期的电话号码吗?
答案 0 :(得分:4)
big.NewFloat(float64(2.1234))
float64(2.1234)
转换为Go float64
(IEEE-754 64位浮点数),具有53位精度。
例如,
package main
import (
"fmt"
"math/big"
)
func main() {
// 53 bits of precision (float64)
a := big.NewFloat(float64(2.1234))
fmt.Println(a.Text(102, 18))
x := "2.1234"
// 53 bits of precision
f, _, err := big.ParseFloat(x, 10, 53, big.ToNearestEven)
if err != nil {
panic(err)
}
fmt.Println(f.Text(102, 18))
// 256 bits of precision
f, _, err = big.ParseFloat(x, 10, 256, big.ToNearestEven)
if err != nil {
panic(err)
}
fmt.Println(f.Text(102, 18))
}
游乐场:https://play.golang.org/p/z5iK90lQcD9
输出:
2.123400000000000176
2.123400000000000176
2.123400000000000000