我使用我在小学学到的方法创建了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中遇到某种数字溢出,或者我错过了什么?
答案 0 :(得分:3)
在Javascript中,数字是双精度浮点数。
这意味着精度约为15位。由于您的计算有18位数,因此只有前15位是正确的。