假设我在JS中写这个:
var product = 50000000*39048902222211111111111111111111:
alert(product); //this gives me 1.9524451111105555e+39.
有没有办法显示整个数字,而不是那个 e + 39 的东西?
答案 0 :(得分:2)
您尝试表示的整数值大于Javascript可以处理的整数精度(固定精度算术)。最大安全整数为-9007199254740991
到9007199254740991
或+/-(2^53-1)
虽然可以表示9007199254740992
,但它被认为是不安全的。为什么?试试这个jsFiddle
的Javascript
alert(9007199254740992 + 1);
输出
9007199254740992
请参阅specification ecma-262/5.1/#sec-8.5
但是你可以使用arbitrary-precision arithmetic的库,或自己动手。
加载一个此类库require.js
的Javascript
require.config({
paths: {
bignumberjs: 'https://raw.github.com/MikeMcl/bignumber.js/master/bignumber.min'
}
});
require(['bignumberjs'], function (BigNumber) {
BigNumber.config({
EXPONENTIAL_AT: 100
});
var product = new BigNumber('50000000').times('39048902222211111111111111111111');
alert(product);
});
输出
1952445111110555555555555555555550000000
在jsFiddle上
答案 1 :(得分:0)
尝试这样的事情:
Number.prototype.realValue = function(){
return this.toString().replace(/^([+-])?(\d+).?(\d*)[eE]([-+]?\d+)$/, function(x, s, n, f, c){
var l = +c < 0, i = n.length + +c, x = (l ? n : f).length,
c = ((c = Math.abs(c)) >= x ? c - x + l : 0),
z = (new Array(c + 1)).join("0"), r = n + f;
return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
});
};
访问方法,如:
var product = 50000000*39048902222211111111111111111111:
alert(product.realValue())
来源:Javascript display really big numbers rather than displaying xe+n