浮點數精度 - skynocover/Wiki-for-GoLang GitHub Wiki
先擷取位數後才做運算會出現問題
func main() {
var ff, e float64
e = 100.00
ff = -0.210615789
ff = FloatRound(ff, 4)
fmt.Println(ff) // 输出 -0.2106
qq := ff * e
fmt.Println(qq) // 输出 -21.060000000000002
}
// 截取小数位数
func FloatRound(f float64, n int) float64 {
format := "%." + strconv.Itoa(n) + "f"
res, _ := strconv.ParseFloat(fmt.Sprintf(format, f), 64)
return res
}
因此要將擷取位數當作最後一個步驟
// 先计算
qq := ff * e
fmt.Println(qq) // 输出 -21.0615789
// 再截取
qq = FloatRound(qq, 4)
fmt.Println(qq) // 输出 -21.0616