js 解决浮点类型计算问题
Posted Mr_hyc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js 解决浮点类型计算问题相关的知识,希望对你有一定的参考价值。
方案一:直接上库(decimal.js)
使用简单粗暴,目前使用没有发现bug(我没发现)
源码还没来得及研究,具体实现未知...
new Decimal(参数1).add(new Decimal(参数2))
方案二:封装一个
大体思路就是 => 将两个值转为整数(乘)=> 求和 => 转为浮点型(除)
function sum(arg1, arg2) {
/* 参数必须是数值类型 */
if(isNaN(parseFloat(arg1))) return;
if(isNaN(parseFloat(arg2))) return;
/* 分别取参数小数位数 */
let decimal_1 = (arg1.toString().split(".")[1] || "").length;
let decimal_2 = (arg2.toString().split(".")[1] || "").length;
/* 放大小数位最多位数的值进行求和(乘),将结果再缩小(除) */
let enlargeLen = Math.pow(10, Math.max(decimal_1, decimal_2));
return (arg1 * enlargeLen + arg2 * enlargeLen) / enlargeLen;
}
其他运算同理。
总结:
为什么js浮点运算会有精度问题?
js 所有数据类型都是IEEE754 标准,是不区分浮点型和整数型,
但是计算机中都是以二进制存储数据的(大家都知道的),
但就在浮点型转二进制出现了问题
0.1 => 0.0001100110011001100110011001100110011001100110011001101
0.2 => 0.001100110011001100110011001100110011001100110011001101
所以...
详细说明 => https://www.cnblogs.com/zm-bl...
以上是关于js 解决浮点类型计算问题的主要内容,如果未能解决你的问题,请参考以下文章