浮點數精度 - 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