我正在尝试将这个大十进制数加在一起得到9999999999.9999999999,但我得到的是10000000000。
以下是代码:
function add(x, y) {
var filterFloat = function (value) {
if(/^(\-|\+)?([0-9]+(\.[0-9]+)?|Infinity)$/
.test(value))
return Number(value);
return NaN;
}
if (typeof x == 'string') {
filterFloat(x);
console.log(x);
};
if (typeof y == 'string') {
filterFloat(y);
console.log(y);
};
var z = filterFloat(x) + filterFloat(y);
//var short = z.toFixed(4);
//console.log(short);
//return short.toString();
//return z.toString();
return z;
var zz = z.toString();
return zz;
//console.log(typeof zz);
}
以下是传递的论据:
add("1234567890.0987654321", "8765432109.9012345678");
见下面的小提琴:
答案 0 :(得分:1)
这很可能是floating-point precision在工作。通常,由现代CPU计算的浮点数只是大致正确,并且有很多边缘情况,就像您正在经历的那样。这是由于CPU中寄存器的长度有限。
如果你需要任意精度,你需要回退到一个(慢得多)处理它的库(或者当然是手工完成)。
答案 1 :(得分:0)