比方說,我寫這篇文章的JS:如何在JavaScript中顯示整數?
var product = 50000000*39048902222211111111111111111111:
alert(product); //this gives me 1.9524451111105555e+39.
有什麼辦法來顯示整數,而不是E + 39的事情嗎?
比方說,我寫這篇文章的JS:如何在JavaScript中顯示整數?
var product = 50000000*39048902222211111111111111111111:
alert(product); //this gives me 1.9524451111105555e+39.
有什麼辦法來顯示整數,而不是E + 39的事情嗎?
你正在試圖代表的整數值比整數精度更大的那Javascript可以處理(固定精度算術)。最大安全整數爲-9007199254740991
至9007199254740991
或+/-(2^53-1)
儘管可以表示9007199254740992
,但它被認爲是不安全的。爲什麼?試試這個jsFiddle
的Javascript
alert(9007199254740992 + 1);
輸出
9007199254740992
見specification ecma-262/5.1/#sec-8.5
但是你可以使用一個庫arbitrary-precision arithmetic,或推出自己。
使用一個這樣的庫,bignumber.js
,裝用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
嘗試財產以後這樣的:
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) : "");
});
};
接取的medthod這樣的:
var product = 50000000*39048902222211111111111111111111:
alert(product.realValue())
來源:Javascript display really big numbers rather than displaying xe+n
對不起,但是您失去了精度。 http://jsfiddle.net/Xotic750/bVj6R/給出'195244511111055550000000000000000000000' – Xotic750
隨着數字那麼大,你需要一些額外的庫。 JS中的原生數字必須更小 - 請參見[這個問題](http://stackoverflow.com/q/307179/1169798) – Sirko
@Sirko確實。您無法打印整個數字,因爲javascript不會存儲整個數字。請參閱http://stackoverflow.com/questions/1685680/how-to-avoid-scientific-notation-for-large-numbers-in-javascript – TastySpaceApple
該值大於[最大整數精度](http:// www .ecma-international.org/ecma-262/5.1 /#sec-8.5)表示Javascript可以處理。要執行如此大的整數運算並保持精確度,您需要使用類似['bignumber.js'](https://github.com/MikeMcl/bignumber.js)的庫。 – Xotic750