导航

萌即是正义!时不时分享一些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-05-17
@老张博客:一千多人民币的水平吧
广树
2024-05-17
@MqyGalaxy:以前空中网的时代好像没有同步吧,现在同步了呀。
广树
2024-05-17
@DavidYR:不愧是大佬!行动力好强!我已经好几年没碰坦克世界了🤭
老张博客
2024-05-17
不知道你说的贵是多少钱呀。
MqyGalaxy
2024-05-17
@广树:我不是很清楚,一直都玩的是亚服美服OωO。但好像一直都是同步的吧
正在攻略

圣兽之王.jpg

传颂之物

PSN奖杯卡

PSN奖杯卡

赞助商广告