程序代码:
<script>
var x;document.write("<p>仅显示17位: ");
x=12345678901234567890;
document.write(x + "</p>");
//////////////////////////////////
问题:
输出是:仅显示17位: 12345678901234567000 为什么呢?后三位都显示为0??
答案:
电脑是用有限的位数来表示某个数值的,不可能无限,否则多少内存都不够用。既然位数有限,那么就必然有数值的大小范围,比如用32位(即4个字节)来表示一个整数,最大值就是2G-1(即21亿多),最小值是-2G(即-21亿多),超出这个范围的数,就只能用浮点数来表示,浮点数是64位(8个字节),采用的是m*10^n这样的指数形式,其中n是指数,占用11位,m是尾数,占用52位,剩下的1位是符号位(用来表示正数或负数)。这样的话电脑中只需保存m和n就能任意表示一个数值了。比如你所说的那个数,用浮点数来表示就是:
1.2345678901234567 * 10 ^ 19
其中19是指数,1.2345678901234567是尾数,那么电脑上保存的实际上就是19和12345678901234567这两个整数。为什么是12345678901234567而不是1234567890123456789呢?因为比12345678901234567再多一位数的话,就会超出52位所能表示的最大整数范围了!所以电脑上最多就只能保存到12345678901234567了,这就是为什么最后的输出结果为
12345678901234567000
同样道理,1234567890123456789012345678901234567890 的显示结果也只能是
1234567890123456700000000000000000000000
它的浮点数表示方式为
1.2345678901234567 * 10 ^ 39
也就是说尾数没变,指数变为39了。