导航

萌即是正义!时不时分享一些ACG活动记录与有趣代码的小站!

侧边栏
最新评论
广树管理员
2025-02-07 19:30
@Xia:这个暂时没有写成配置项,有这个需求吗?
Xia
2025-02-07 18:56
广树大大,我有个小问题,维基萌博客系统,邮件的发件人和标题该如何设置? ∠( ᐛ 」∠)_
火喵酱
2025-02-07 18:54
@广树:开心开心!!
广树管理员
2025-02-07 18:46
@火喵酱:尽量满足大佬的需求
火喵酱
2025-02-07 18:40
期待支持armv7,现在只有amd64没法用qaq
正在攻略

logo_kai.jpg


PSN奖杯卡

PSN奖杯卡

赞助商广告

JS大整数(字符串)减法 | 预防JS精度丢失

作者:广树时间:2018-08-02 09:38:49分类:JavaScript/jQuery/Vue

一般情况下JS使用数字运算比较大的大整数:

10000000000000000 - 1 = 10000000000000000

所以这里还是要用字符串去运算比较大的正整数

function minus(a, b){//字符串减法
    a = a.split('');
    b = b.split('');
    var aMaxb = a.length > b.length; // 标记A是否大于B
    if(a.length == b.length)
    {
        for(var i=0, len=a.length; i<len; i++)
        {
            if(a[i] == b[i]) continue;
            aMaxb = a[i] > b[i];
            break;
        }
    }
    if(!aMaxb){
        a = [b, b = a][0]; // 只要A不比B大都交换
    } 
    var result = '';
    while(a.length)
    {
        var temp = parseInt(a.pop()) - parseInt(b.pop() || 0);
        if(temp >= 0) {
            result = temp + result;
        } else{
            result = temp + 10 + result;
            a[a.length-1]--; // 由于已经保证了a一定大于等于b,所以不存在a[i-1]为undefined的情况
        }
    }
    var resultEnd = (aMaxb?'':'-') + result.replace(/^0*/g, '');// 去掉前面可能的无效0
    if(resultEnd === '-'){
        resultEnd = '0'
    }
    return resultEnd; 
}

例:

minus('10000000000000000000000', '1')
"9999999999999999999999"

minus('1', '2')
"-1"

minus('1', '1')
"0"

修改自:大整数的加减法运算(JavaScript版)

相关文章:JS大整数(字符串)相乘与字符串乘以n个0 整数数字用字符串相加

donate.png

1210 x 50(蓝底).png

cloudcone