使用decimal包解决golang浮点数运算失真 - Jxy 博客
实现
package service
import (
"github.com/shopspring/decimal"
"testing"
)
func TestDecimal(t *testing.T) {
var a float64=0.3
var b float64=0.6
t.Logf("a+b=%v",a+b) // 0.8999999999999999 正常应该是0.9,失真了
a1:=decimal.NewFromFloat(a)
b1:=decimal.NewFromFloat(b)
t.Logf("a1+b1=%v",(a1.Add(b1)).String()) // 0.9
}
注意
decimal建议只用做计算;不建议用来字符串和浮点数之间转换,比如Decimal 转float64 会自定约算小数点,而且大量数据计算下性能差
var val = "0.8999999999999999" 在经过Decimal 转float64 后val=0.9
网友评论