我是如何击败Javascript计算器的?

时间:2013-11-27 16:36:46

标签: javascript numbers

我使用我在小学学到的方法创建了following code来计算数字乘以11:

function multiplyby11(number) {
    var num = number + "";
    var integers = num.split('');
    var numbers = [];
    integers.forEach(function (val) {
        numbers.push(parseInt(val));
    });
    var multiply = [];
    multiply.push(numbers[0]);
    var number_length = numbers.length;
    for (var i = 1; i < number_length; ++i) {
        multiply.push(numbers[i] + numbers[i - 1])
    }
    multiply.push(numbers[number_length - 1]);

    function removeAllMultiplesOfTen() {
        var allRemoved = true;
        multiply.forEach(function (val, index) {
            if (val >= 10) {
                val -= 10;
                multiply[index - 1]++;
                multiply[index] = val;
                allRemoved = false;
            }
        });
        if (!allRemoved) {
            removeAllMultiplesOfTen();
        }
    }

    removeAllMultiplesOfTen();
    return multiply.join('');
}

如果我输入15487548796454858这样的数字,我的代码会返回

  

170363036761003438

但如果我只是对15487548796454858 * 11进行简单的javascript计算,则返回:

  

170363036761003420

完全不正确。

我是否在javascript中遇到某种数字溢出,或者我错过了什么?

1 个答案:

答案 0 :(得分:3)

在Javascript中,数字是双精度浮点数。

这意味着精度约为15位。由于您的计算有18位数,因此只有前15位是正确的。