Sar*_*lai 7 floating-point standards rounding go
将 golang float64 值与整数相乘时,由于浮点数的存储方式,结果包含高精度误差值。这是一个代码片段,显示了我所指的问题
package main
import (
"fmt"
)
func main() {
var l float64 = 0.2
fmt.Println("Hello, playground",l*6)
}
Run Code Online (Sandbox Code Playgroud)
结果是
Hello, playground 1.2000000000000002
Run Code Online (Sandbox Code Playgroud)
这是同一个游乐场的播放链接
是否有解决错误的标准/最佳实践?
这取决于用例是什么以及您想要显示多少位数字。你可以这样做:
func main() {
var l float64 = 0.2
fmt.Printf("Hello, playground %.8f",l*6)
}
Run Code Online (Sandbox Code Playgroud)
并且只显示小数点后8个单位。但是,例如,如果您正在处理货币,则最好根本不使用浮动货币,并将所有内容保存为美分(在美国)或数量(最低面额的货币)。