美文网首页
使用decimal包解决golang浮点数运算失真

使用decimal包解决golang浮点数运算失真

作者: 五岁小孩 | 来源:发表于2024-03-17 14:13 被阅读0次

使用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 

参考资料

浮点精度(float、double)运算不精确的原因marco_的博客-CSDN博客_java浮点数运算不精确的原因

go--decimal使用_狮子QH的博客-CSDN博客_decimal go

相关文章

网友评论

      本文标题:使用decimal包解决golang浮点数运算失真

      本文链接:https://www.haomeiwen.com/subject/rfgozdtx.html