js 计算失误情况
在用 js 进行数值计算的时候,比如0.1+0.2
时,会产生精度问题。另一方面,number 的计算范围有限,当 number 用来计算整数时,其范围为-2^53 ~ 2^53
,为 16 位数。当数字超过 16 位数时,js 既不会报错,会造成的影响只是计算结果不准确;另外,当数字是小于 1 且小数点后面带有 6 个 0 以上的浮点数值或者整数位数字多于 21 位,js 会自动将数字转为科学计数法。
为了解决这种情况,我们可以使用以下方法:
1. 输入数字的时候尽量限制范围,防止用户输入过大不合理的数字
如果有产生由用户输出数字计算出来的数字,要校验该数字是否超过数据库允许的范围。比如进行乘操作的时候。
数据库中,以分为单位进行存储,避免存储小数。
计算数据时,不要使用
parseFloat
和toFixed
相关 Number 对象方法进行计算,而是应该使用专门的库进行计算,比如此处说的 decimal.js 库
decimal.js
decimal.js 是使用的二进制来计算的数字处理库,以下是基本运算:
1 | // 加法 |
另外,Decimal 有自己专门的toString
和toFixed
方法。当然,decimal.js 还有很多其他的十分强大的功能。
DemCal
以下是根据 decimal.js 封装的一些进行计算时常用到的函数
1 | const Decimal = require("./decimal.min.js"); |
使用
1 | var financeTool = require("./financeTool"); |