JS中准确的浮点运算库

本文介绍了一个名为myMath.js的自定义JavaScript库,该库提供了一系列用于处理浮点数加减乘除运算的方法,确保了计算的准确性。通过扩展Math对象和Number原型,使得这些方法可以方便地被调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将如下代码,拷贝到文件myMath.js文件中,在相应的页面进行引用:

<script type="text/javascript" src="../js/myMath.js"></script>

即可调用相应的加减乘除运算了.

示例js代码(浮点数减法运算):

    

<script type="text/javascript">
    var a=2.2,b=1.1;
    document.write(a.sub(b));
</script>

myMath.js代码如下:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

/**
 * Created by Jerry Tong on 2016/7/4.
 */
Math.add = function(v1, v2)
{
///<summary>精确计算加法。语法:Math.add(v1, v2)</summary>
///<param name="v1" type="number">操作数。</param>
///<param name="v2" type="number">操作数。</param>
///<returns type="number">计算结果。</returns>
    var r1, r2, m;
    try
    {
        r1 = v1.toString().split(".")[1].length;//1个加数的小数的位数
    }
    catch (e)
    {
        r1 = 0;
    }
    try
    {
        r2 = v2.toString().split(".")[1].length;//2个加数的小数的位数
    }
    catch (e)
    {
        r2 = 0;
    }
    m = Math.pow(10, Math.max(r1, r2));//小数位数最多的

    return (v1 * m + v2 * m) / m;//整数运算再还原
}


Number.prototype.add = function(v)
{
///<summary>精确计算加法。语法:number1.add(v)</summary>
///<param name="v" type="number">操作数。</param>
///<returns type="number">计算结果。</returns>
    return Math.add(v, this);
}


Math.sub = function(v1, v2)
{
///<summary>精确计算减法。语法:Math.sub(v1, v2)</summary>
///<param name="v1" type="number">操作数。</param>
///<param name="v2" type="number">操作数。</param>
///<returns type="number">计算结果。</returns>
    return Math.add(v1, -v2);//减法是带负号的加法运算
}


Number.prototype.sub = function(v)
{
///<summary>精确计算减法。语法:number1.sub(v)</summary>
///<param name="v" type="number">操作数。</param>
///<returns type="number">计算结果。</returns>
    return Math.sub(this, v);
}


Math.mul = function(v1, v2)
{
///<summary>精确计算乘法。语法:Math.mul(v1, v2)</summary>
///<param name="v1" type="number">操作数。</param>
///<param name="v2" type="number">操作数。</param>
///<returns type="number">计算结果。</returns>
    var m = 0;
    var s1 = v1.toString();
    var s2 = v2.toString();
    try
    {
        m += s1.split(".")[1].length;
    }
    catch (e)
    {
    }
    try
    {
        m += s2.split(".")[1].length;
    }
    catch (e)
    {
    }

    return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
}


Number.prototype.mul = function(v)
{
///<summary>精确计算乘法。语法:number1.mul(v)</summary>
///<param name="v" type="number">操作数。</param>
///<returns type="number">计算结果。</returns>
    return Math.mul(v, this);
}


Math.div = function(v1, v2)
{
///<summary>精确计算除法。语法:Math.div(v1, v2)</summary>
///<param name="v1" type="number">操作数。</param>
///<param name="v2" type="number">操作数。</param>
///<returns type="number">计算结果。</returns>
    var t1 = 0;
    var t2 = 0;
    var r1, r2;
    try
    {
        t1 = v1.toString().split(".")[1].length;
    }
    catch (e)
    {
    }
    try
    {
        t2 = v2.toString().split(".")[1].length;
    }
    catch (e)
    {
    }

    with (Math)
    {
        r1 = Number(v1.toString().replace(".", ""));
        r2 = Number(v2.toString().replace(".", ""));
        return (r1 / r2) * pow(10, t2 - t1);
    }
}


Number.prototype.div = function(v)
{
///<summary>精确计算除法。语法:number1.div(v)</summary>
///<param name="v" type="number">操作数。</param>
///<returns type="number">计算结果。</returns>
    return Math.div(this, v);
}

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值