在JS计算的时候,偶然发现一个奇怪的现象,如图:
百度发现: java和JavaScript中计算小数运算时,都会先将十进制的小数换算到对应的二进制,一部分小数并不能完整的换算为二进制,这里就出现了第一次的误差。
解决
1、js之间的整数运算都是正常的。所以先将数值乘以10的整数倍,变成整数运算,之后再将结果除以10的整数倍。如:
function add(num1, num2){
const point1 = (num1.toString().split('.')[1] || '').length;
const point2 = (num2.toString().split('.')[1] || '').length;
const baseNum = Math.pow(10, Math.max(point1, point2));
return (num1*baseNum + num2*baseNum)/baseNum;
}
2、第三方库
-
Math.js
-
big.js