请问大家平时在设计小数后八位的计算,如何解决精度问题?

发现有些数值的加减计算,会存在小数精度问题,网上搜索了一大圈,类似*100 再/100的

感觉还是不太好,有什么最标准通用的解决方法吗?

阅读 1.9k
4 个回答

如果想精确计算,最简单的方法是使用健壮的第三方库。如果想自己写,无非就是把第三方库踩过的坑再踩一遍,何必呢(除非学习研究)?

如果要自己写,有几种方式来处理:

  1. 换算成整数。比如确定是 8 位小数,可以 \( \times 10^8 \) 之后保存和计算机,显示的时候再 \( \div 10^8 \) 并四舍五入到 8 位小数(比如 .toFixed(8))。
  2. 保存和计算的时候就把整数和小数部分分开,都用整数来保存,计算的时候注意进/退位的处理。在某些语言中,是通过二进制划位来保存,然后统一进行计算的。在 JS 中不太好用二进制,可以用字符串来保存,并拆解开来计算。

如果想深入了解或研究,可以去研究一下浮点数存储和计算的相关标准。如果只是应用,还是找个靠谱的第三方库来得快。

bigNumber.js 插件用来解决这种精度问题的
parseFloat((a+b).tofixed(10))

只处理加减运算,要确保精确,不用第三方自己写,那就先乘一百再除一百这样来
还要保证大数不溢出,那就转字符串自己处理进位实现四则运算

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题