解决“golang”float64 乘法高精度误差的正确方法是什么

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)

这是同一个游乐场的播放链接

是否有解决错误的标准/最佳实践?

dav*_*ave 0

这取决于用例是什么以及您想要显示多少位数字。你可以这样做:

func main() {
    var l float64 = 0.2
    fmt.Printf("Hello, playground %.8f",l*6)
}
Run Code Online (Sandbox Code Playgroud)

并且只显示小数点后8个单位。但是,例如,如果您正在处理货币,则最好根本不使用浮动货币,并将所有内容保存为美分(在美国)或数量(最低面额的货币)。