正在召唤神秘力量
导航

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

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 整数数字用字符串相加

侧边栏
最新评论
广树
2024-04-19
@MqyGalaxy:谷歌严格意义上距离垄断还差一点。百度是真垄断了。
广树
2024-04-19
@2broear:看来大家都怨声载道
MqyGalaxy
2024-04-19
尽管谷歌也被经常被诟病垄断搜索引擎,但不得不说搜索引擎信息收录和搜索这方面谷歌确实是做的最好的,网站信息收录和同步还是挺快的。国内百度什么的感觉就算你码了几十行的字去搜索,前排显示的依旧是广告或者是无关的垃圾内容(笑)。
2broear
2024-04-19
百度就是个辣鸡~
广树
2024-04-19
@粽叶加米:心态好,哈哈哈。我现在也随缘了,但是还是要研究研究现在搜索引擎都什么情况。
正在攻略

圣兽之王.jpg

传颂之物

PSN奖杯卡

PSN奖杯卡

赞助商广告