引言
下面的一段简单程序 0.3 + 0.6 结果是什么?
有人会天真的认为是0.9,但实际输出却是0.8999999999999999(go 1.13.5)问题在于大多数小数表示成二进制之后是近似且无限的。
以0.1为例。它可能是你能想到的最简单的十进制之一,但是二进制看起来却非常复杂:0.0001100110011001100…
golang 与其他很多语言(C、C++、Python…)一样,使用了IEEE-754标准存储浮点数
。
golang decimal 包详解
https://zhuanlan.zhihu.com/p/102519285
golang decimal 包使用
go get github.com/shopspring/decimal
func SumFloat64List(amount int64,randList []float64,t *testing.T) {
var sum float64
decimalSum := decimal.NewFromFloat(sum)
for _,item := range randList {
decimalItem := decimal.NewFromFloat(item)
decimalSum = decimalSum.Add(decimalItem)
}
sum,_ = decimalSum.Float64()
if sum != float64(amount) {
fmt.Println(sum)
t.Error("结果不正确")
}
}