2013-12-18 41 views
0

我做了一个脚本,生成一个1和一个googol(它是一个由1和100个零组成的数字)之间的数字,但它不能精确地显示数字。它使数字像“7.463677302002907e + 99”,这不是我想要的。我对JavaScript很陌生,但我设法做到了这一点。 这里是代码:如何让Javascript显示非常大的数字?

<html> 
<body> 
<title>Random number between 1 an a googol-generator</title> 

<p id="demo">Click the button to display a random number between 1 and a googol.</p> 

<button onclick="myFunction()">Generate</button> 

<script> 
function myFunction() 
{ 
var x=document.getElementById("demo") 
x.innerHTML=Math.floor((Math.random()*10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)+1); 
} 
</script> 

</body> 
</html> 
+1

您的发电机并没有真正产生一个随机数天文数字。由于浮点数有限制的小数点,Math.random()不会返回由100位数组成的十进制数。 – RononDex

+2

生成1到100之间的随机数是否更有用,然后生成许多随机数并将它们串在一起?或者你真的想为这个数字使用任何东西,因为那样你就需要一个大的整数库,参见例如http://stackoverflow.com/questions/3072307/is-there-a-bignum-library-for-javascript – CompuChip

+0

JavaScript的数字使用[双精度浮点](https://en.wikipedia.org/wiki/ Double-precision_floating-point_format)格式,其精度只有15到17个十进制数字。如果你完全写出了这个数字,那么大部分都是零。 – Boann

回答

2

JavaScript不能处理大的数字。它可以处理那么大的数字,但不是那么精确。

Javascript中的数字是一个浮点数,精度约为15位。如果你将一个随机数字靠近一个googol,那么它将在开始时为15位数,最后为85个零。

要创建一个很大的数字,您需要制作几个随机数字并将数字放在一起形成一个大数字。例如:

var s = ''; 
for (var i = 0; i < 10; i++) { 
    s += Math.floor(Math.random() * 1e10); 
} 
while (s.length > 1 && s[0] == '0') s = s.substr(1); 

演示:http://jsfiddle.net/Guffa/YxJ3U/