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 解决浮点类型计算问题的主要内容,如果未能解决你的问题,请参考以下文章

js中浮点计算错误原因及解决办法

JS解决加减乘除浮点类型丢失精度问题

JS解决加减乘除浮点类型丢失精度问题

关于js浮点数计算精度不准确问题的解决办法

js浮点数精度丢失问题及如何解决js中浮点数计算不精准

JS 乘法运算出现了浮点,该怎么解决