美文网首页
js大整数运算

js大整数运算

作者: 躺在家里干活 | 来源:发表于2019-08-29 09:37 被阅读0次

对于大整数,是指超过规定类型的整数,它一般的存储类型为字符串类型char。在JS中,需要将字符串中的每一位字符利用parseInt()转成整数,再做加减,否则最后的结果是字符串的连接

举个栗子?

9999999999999999 == 10000000000000000; // true

当 x 大于 2^53 且二进制有效位数大于 53 位时,就会存在精度丢失。这和小数的精度丢失本质上是一样的。小数和大整数的精度丢失,并不仅仅在 JavaScript 中存在。严格来说,使用了IEEE 754 浮点数格式来存储浮点类型的任何编程语言(C/C++/C#/Java 等等)都存在精度丢失问题。在 C#、Java 中,提供了 Decimal、BigDecimal 封装类来进行相应的处理,才避开了精度丢失。

大整数相加

  function add(a, b) {
        const lena = a.split('').length;
        const lenb = b.split('').length;
        let maxLen;
        let minLen;
        let result;
        let total = [];
        let addFlag = 0;

        if (lena > lenb) {
            maxLen = lena;
            minLen = lenb;
        } else {
            maxLen = lenb;
            minLen = lena;
        }

        for (let i = maxLen - 1, j = minLen - 1; i >= 0; i--, j--) {
            if (j >= 0) {
                result = parseInt(a[i]) + parseInt(b[j]) + addFlag;
            } else {
                result = parseInt(a[i]) + addFlag;
            }
            if (result > 9) {
                result = result - 10;
                if (i == (maxLen.length - 1)) result[maxLen.length] = 1;
                addFlag = 1;
                total.unshift(result);
            } else {
                total.unshift(result);
                addFlag = 0;
            }
        }
        const final = total.join('');
        return final;
    }
    console.log(add('1112343', '12348')); // 1124691

大整数相乘

  function multi(a, b) {
        var str1, str2, len1, len2, maxlen, result = [];
        str1 = a.split("").reverse();
        str2 = b.split("").reverse();
        len1 = str1.length;
        len2 = str2.length;
        //因为要在下一步做累加,如果不初始化为0,result[]中的值会变为NaN
        //因为未初始化的数组中的值为undefined
        for (var i = 0; i < len1; i++)
            for (var j = 0; j < len2; j++)
                result[i + j] = 0;
        for (var i = 0; i < len1; i++)
            for (var j = 0; j < len2; j++)
                //根据乘法的手动计算方式,在上下相同位上会有相加
                result[i + j] += parseInt(str1[i]) * parseInt(str2[j]);
        var n = result.length;
        for (var k = 0; k < n; k++) {
            var temp = result[k];
            if (temp >= 10) {
                result[k] = temp % 10;
                //JS中的"/"不是除法取整,会取得小数,所以要用Math.floor()
                result[k + 1] += Math.floor(temp / 10);
            }
        }
        return result.reverse().join("");
    }
    var d = multi("99999999999999999", "1");
    console.log(d);

大整数相减

  function jian(a, b) {
        var zong = [String(a), String(b)];
        var fen = [];
        zong = getMax(zong[0], zong[1]);
        if (zong.length == 3) {
            //alert("不足");
            return false;
        }
        zong[0] = zong[0].split('');
        zong[1] = zong[1].split('');
        var jialing;
        if (!(zong[0].length == zong[1].length)) {
            jialing = new Array(zong[0].length - zong[1].length + 1).join('0');
            zong[1] = jialing.split('').concat(zong[1]);
        }
        var next = 0;
        for (var i = (zong[0].length - 1); i >= 0; i--) {
            var cha = Number(zong[0][i]) - Number(zong[1][i]) - next;
            next = 0;
            if (cha < 0) {
                cha = cha + 10;
                next = 1;
            }
            fen.unshift(cha % 10);
        }
        var result = fen.join('');
        if (result[0] == 0) {
            result = shanchuling(result);
        }
        return result;
    }

我的个人博客,有空来坐坐

相关文章

  • js大整数运算

    对于大整数,是指超过规定类型的整数,它一般的存储类型为字符串类型char。在JS中,需要将字符串中的每一位字符利用...

  • JS实现大整数运算

    首先,对于大整数,是指超过规定类型的整数,它一般的存储类型为字符串类型char。在JS中,需要将字符串中的每一位字...

  • Javascript 位运算及运用

    Javascript 位运算 参考:巧用JS位运算 ECMAScript 整数有两种类型,即有符号整数(允许用正数...

  • 大整数运算

    一、定义、赋值、比较、输出1、大整数的结构体 2、逆着赋值(先用字符串读入,再把字符串另存值bign结构体)思想:...

  • 大整数运算

    大整数运算 大整数存储 在C语言中若要计算A+B,如果A和B的在范围int(或long)范围内,那很容易就可以写出...

  • 05-js运算符

    js的运算符 += : x += y --> x = x + y ; 在js里不区分整数和小数java里面in...

  • js的数字与运算符

    数字因为js只有number这一种类型,包含整数和浮点数。 运算符有算术运算符、操作运算符、比较运算符、和逻辑运算...

  • JS-运算符

    JS的算术运算符 JavaScript的算数运算和C语言几乎一样与C语言不同的是: 在JavaScript中整数除...

  • js运算符单竖杠“|”与“||”的用法和作用介绍

    在js开发应用中我们通常会碰到“|”与“||”了,那么在运算中“|”与“||”是什么意思呢? 在js整数操作的时候...

  • Java程序基础--整数运算

    整数运算即使是除法运算,也是精确的,两个整数相除只能得到结果的整数部分。 求余运算用% 注意:整数的除法对于除数为...

网友评论

      本文标题:js大整数运算

      本文链接:https://www.haomeiwen.com/subject/agubectx.html