Golang 小数计算现状:

存在精度损失

d := 1129.6
fmt.Println((d * 100))   //输出:112959.99999999999var d float64 = 1129.6
fmt.Println((d * 100)) //输出:112959.99999999999m1 := 8.2
m2 := 3.8
fmt.Println(m1 - m2) // 期望是4.4,结果打印出了4.399999999999999

解决方案:

Decimal

由于golang中默认没有decimal类型,如果想使用decimal类型需要通过第三方包

go get github.com/shopspring/decimal

decimal使用方式

package mainimport ("fmt""github.com/shopspring/decimal"
)func main() {var v1 = decimal.NewFromFloat(0.1)var v2 = decimal.NewFromFloat(0.2)var v3 = v1.Add(v2)  // 0.3var v4 = v1.Sub(v2)  // -0.1var v5 = v1.Mul(v2)  // 0.02var v6 = v1.Div(v2)  // 0.5var v7 = decimal.NewFromFloat(3.4625)var data1 = v7.Round(1)     // 3.5 保留一位小数,四舍五入var data2 = v7.Truncate(1)  // 3.4 保留一位小数,直接舍弃fmt.Println(v3, v4, v5, v6)fmt.Println(data1, data2)
}

注意:

运算过程中数据全部变为 decimal.Decimal 格式,在最后计算时需要将其转换成需要的格式

package mainimport ("fmt""github.com/shopspring/decimal"
)func main() {var v1 = decimal.NewFromFloat(0.1)var v1 = decimal.NewFromFloat(0.1)var resp1 float64var resp2 stringresp1, _ = v1.Float64()  // note: 注意这边第二个参数并不是ok,而是是否准确resp2 = v1.String()fmt.Printf("resp1 = %v, type = %v\n", resp1, reflect.TypeOf(resp1).String())// output: resp1 = 0.1, type = float64fmt.Printf("resp2 = %v, type = %v\n", resp2, reflect.TypeOf(resp2).String())// output: resp2 = 0.1, type = string
}

Golang 浮点数运算 避免精度损失 Decimal包相关推荐

  1. 64位浮点数_JavaScript 浮点数运算的精度问题

    问题描述 在 JavaScript 中整数和浮点数都属于 Number 数据类型,所有数字都是以 64 位浮点数形式储存,即便整数也是如此. 所以我们在打印 1.00 这样的浮点数的结果是 1 而非 ...

  2. 浮点数运算的精度问题:以js语言为例

    在 JavaScript 中整数和浮点数都属于 Number 数据类型,所有数字都是以 64 位浮点数形式储存,即便整数也是如此. 所以我们在打印 1.00 这样的浮点数的结果是 1 而非 1.00  ...

  3. java小数丢失精度_Java中的小数运算与精度损失

    float.double类型的问题 我们都知道,计算机是使用二进制存储数据的.而平常生活中,大多数情况下我们都是使用的十进制,因此计算机显示给我们看的内容大多数也是十进制的,这就使得很多时候数据需要在 ...

  4. 浮点数运算的精度问题

    问题描述 在 JavaScript 中整数和浮点数都属于 Number 数据类型,所有数字都是以 64 位浮点数形式储存,即便整数也是如此. 所以我们在打印 1.00 这样的浮点数的结果是 1 而非 ...

  5. c语言浮点数乘法运算,记C语言浮点数运算处理 坑 一则

    看一小段C语言程序: int main() { float x = 1.3; x = x - (int)x; int i = (int)(x*); return ; } 在你心目中, 变量 I 是怎样 ...

  6. python 精度损失_Python的浮点数损失精度问题

    本篇讨论的现象可以从下面这段脚本体现出来: >>> x = 0.0 >>> for i in range(10): x += 0.1 print(x) 0.1 0. ...

  7. python3的float数精度_Python3 - 执行精确的浮点数运算

    问题 对浮点数执行精确的计算操作,并且不希望有任何小误差的出现. 解决方案 浮点数的一个普遍问题是它们并不能精确的表示十进制数.并且,即使是最简单的数学运算也会产生小的误差. a = 2.1 b = ...

  8. 关于Java浮点数运算精度丢失问题

    2019独角兽企业重金招聘Python工程师标准>>> 关于Java浮点数运算精度丢失问题 博客分类: java 前几天看了一个朋友的博客,说Java中浮点数运算精度丢失的问题,他给 ...

  9. MATLAB浮点数运算精度问题

    matlab计算题:              而后用matlab进行了一些浮点数计算,但结果都出乎预料:          2+2*eps = 2.000          3 + eps = 3 ...

最新文章

  1. Freescale 基于IMX536处理器的Dialog DA9053电源管理参考设计
  2. parted命令分区
  3. java中insert函数
  4. VS2012 颜色配置成黑色
  5. linux复制以a开头的文件,linux部分试题
  6. R语言-异常数据处理3
  7. UFLDL教程 -- 译文版
  8. 【超分辨率】【深度学习】SRCNN pytorch代码(附详细注释和数据集)
  9. 使用VS2015,office 2007自带的OCR组件来实现OCR功能
  10. Staking八月排行榜 | TokenInsight
  11. 4种工资条制作方法,总有一款适合你
  12. 2014,微信是糖,甜到忧伤
  13. 我们数学中常用的自然常数e代表什么?看完长知识了!
  14. 猫狗图像识别(卷积神经网络算法,TensorFlow安装)
  15. php ecb加密,PHP之DES加密解密算法类(ECB模式)(实例教程)
  16. PHP Warning: file_put_contents(..):failed to open stream: Permission denied in...
  17. Android智能识别 - 银行卡区域裁剪(原理篇)
  18. 机器学习模型中,偏差与方差的权衡及计算
  19. 浅谈新手站长在网站运营中如何去养站?
  20. 08 Python matplotlib numpy 绘制立体永生花送给永恒挚爱

热门文章

  1. 【总结】手机图片预览插件photoswipe使用总结
  2. 光学字符识别(OCR,Optical Character Recognition)
  3. SOC安全运营中心(一) OSSIM安装
  4. 百度地图查询数据结果
  5. [技术讨论]为什么运算放大器有共模输入电压范围限制呢,详解在这里
  6. 刷微信点击量的php,PHP一键刷QQ微信支付宝步数代码
  7. gitlab邮件发不出去解决方法
  8. SMTP客户端python实现
  9. QGIS噱头笔记--(1)QGIS概要了解
  10. mysql 里的1044错误_MySQL1044错误怎样修改错误?