`

Javascript优化后的加减乘除(解决js浮点数计算bug)

阅读更多
js在计算浮点数时候,结果可能会不准确。比如:(在chrome中的运算结果)
2.2 + 2.1 = 4.300000000000001
2.2 - 1.9 = 0.30000000000000027
2.2 * 2.2 = 4.840000000000001
2.1 / 0.3 = 7.000000000000001
优化方法如下:

function add(a, b) {
    var c, d, e;
    try {
        c = a.toString().split(".")[1].length;
    } catch (f) {
        c = 0;
    }
    try {
        d = b.toString().split(".")[1].length;
    } catch (f) {
        d = 0;
    }
    return e = Math.pow(10, Math.max(c, d)), (mul(a, e) + mul(b, e)) / e;
}

function sub(a, b) {
    var c, d, e;
    try {
        c = a.toString().split(".")[1].length;
    } catch (f) {
        c = 0;
    }
    try {
        d = b.toString().split(".")[1].length;
    } catch (f) {
        d = 0;
    }
    return e = Math.pow(10, Math.max(c, d)), (mul(a, e) - mul(b, e)) / e;
}

function mul(a, b) {
    var c = 0,
        d = a.toString(),
        e = b.toString();
    try {
        c += d.split(".")[1].length;
    } catch (f) {}
    try {
        c += e.split(".")[1].length;
    } catch (f) {}
    return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
}

function div(a, b) {
    var c, d, e = 0,
        f = 0;
    try {
        e = a.toString().split(".")[1].length;
    } catch (g) {}
    try {
        f = b.toString().split(".")[1].length;
    } catch (g) {}
    return c = Number(a.toString().replace(".", "")), d = Number(b.toString().replace(".", "")), mul(c / d, Math.pow(10, f - e));
}
转自:http://www.2cto.com/kf/201502/376763.html
分享到:
评论

相关推荐

    解决JS浮点数(小数)计算加减乘除的BUG

    为了解决这个JS浮点数计算的bug,我们可以采取以下几种策略: 1. **四舍五入**:在进行浮点数运算后,通过使用`toFixed()`方法对结果进行四舍五入。例如,`Math.round((0.1 + 0.2).toFixed(2))`将得到`0.30`,然后...

    javascript解决小数的加减乘除精度丢失的方案

    基于上述原因,以下是介绍如何解决在JavaScript中处理小数加减乘除时精度丢失问题的四种方法: 1. 乘法(accMul)函数:此函数通过计算两个数的小数部分的位数,然后相乘后除以10的幂次方来调整结果,以此来解决...

    js中浮点型运算BUG的解决方法说明

    在JS中,浮点数运算不是完全精确的,这在进行涉及小数的加、减、乘、除操作时尤为明显。为了解决这个问题,开发者通常需要编写特殊的函数来实现更精确的计算。 首先,我们来看`accDiv`函数,这是一个用于精确除法...

    walletjs帮你轻松处理货币money的JS库

    4. **加减乘除运算**:支持基本的数学运算,如加法、减法、乘法和除法,确保在处理金钱数值时的准确性。 5. **货币比较**:可以方便地比较两个货币值的大小,这对于排序或条件判断非常有用。 ### 二、使用示例 ``...

    calculator

    在本例中,描述提到的是一个"多功能的计算器",这意味着该软件可能提供了超越基本加减乘除的计算功能,如对数、指数、三角函数、复数运算等。 在IT行业中,开发这样一个计算器软件涉及的知识点主要包括: 1. **...

    计算器 计算器源代码

    在这个案例中,"Calculator"是一个简单的计算器程序,可能包含了加减乘除等基本运算功能。通过分析和学习这个源代码,我们可以深入理解编程语言的工作原理以及如何构建一个实际的应用。 首先,我们需要了解计算器...

    same-ish:Clojure库,用于测试中浮点类型的近似比较

    浮点数在计算机中的存储遵循IEEE 754标准,这种标准允许一定的精度损失,特别是在进行加减乘除等运算时。例如,1.0 - 0.1可能不等于0.9,因为这两个值在计算机内存中不是精确表示的。这种现象称为舍入误差,是所有...

    PHP工程师面试笔试真题(某知名监控产品服务商)-附解析.doc

    14. 在PHP运算符中,优先级从高到低分别是:乘除(*/)、加减(+-)、赋值(=)。 15. 使用PHP操作MySQL时,想取得最近一条查询的信息,应该使用的函数是`mysqli_info()`或`PDO::lastInsertId()`。 **简答题答案** ...

Global site tag (gtag.js) - Google Analytics