请问大家平时在设计小数后八位的计算,如何解决精度问题?
发现有些数值的加减计算,会存在小数精度问题,网上搜索了一大圈,类似*100 再/100的
感觉还是不太好,有什么最标准通用的解决方法吗?
回答:
如果想精确计算,最简单的方法是使用健壮的第三方库。如果想自己写,无非就是把第三方库踩过的坑再踩一遍,何必呢(除非学习研究)?
如果要自己写,有几种方式来处理:
- 换算成整数。比如确定是 8 位小数,可以 \( \times 10^8 \) 之后保存和计算机,显示的时候再 \( \div 10^8 \) 并四舍五入到 8 位小数(比如
.toFixed(8)
)。 - 保存和计算的时候就把整数和小数部分分开,都用整数来保存,计算的时候注意进/退位的处理。在某些语言中,是通过二进制划位来保存,然后统一进行计算的。在 JS 中不太好用二进制,可以用字符串来保存,并拆解开来计算。
如果想深入了解或研究,可以去研究一下浮点数存储和计算的相关标准。如果只是应用,还是找个靠谱的第三方库来得快。
回答:
Big.js 了解一下?
回答:
bigNumber.js 插件用来解决这种精度问题的
parseFloat((a+b).tofixed(10))
回答:
只处理加减运算,要确保精确,不用第三方自己写,那就先乘一百再除一百这样来
还要保证大数不溢出,那就转字符串自己处理进位实现四则运算
以上是 请问大家平时在设计小数后八位的计算,如何解决精度问题? 的全部内容, 来源链接: utcz.com/p/933194.html