使用指数的javascript数字文字
Posted
技术标签:
【中文标题】使用指数的javascript数字文字【英文标题】:javascript number literal using exponent 【发布时间】:2014-08-19 00:34:53 【问题描述】:console.log(2E-12); // returns 2E-12
console.log(2E12); // returns 2000000000000
为什么第一行返回 2E-12 而不是第二行。这是使用指数的非法方式吗?
【问题讨论】:
一个指数为正,另一个为负。 我认为这与 javascript 语言无关,而是console.log
的实现。
@Musa well console.log("" + 2E-12)
打印同样的东西。
是的,console.log
只是使用toString
来获取渲染。
【参考方案1】:
来自toString applied to the Number type的ECMAScript规范:
7。如果 0
8。如果 -6
9。否则,如果 k = 1,则根据 n−1 是正数还是负数,返回由 s 的一位数、后跟小写字符 'e'、后跟加号 '+' 或减号 '-' 组成的 String ,后跟整数 abs(n−1) 的十进制表示(没有前导零)。
n
实际上是数字的指数。所以这表示如果指数介于-7
和21
之间,则该数字应正常显示,否则应使用指数表示法。
【讨论】:
【参考方案2】:渲染器很聪明。如果您尝试console.log(2E-6)
,您会看到它符合您的预期。 console.log(2E-7)
不会……至少在 Chrome 和当前版本的 IE 中是这样。有人认为指数符号对于长小数值更易读。
另外,请注意,您得到的 2e-12
是一个数字,而不是一个字符串。
> console.log(2e-12*2e5)
4e-7
【讨论】:
对于正指数,它从2e+21
开始使用指数符号
所以基本上这是一个错误?
ECMAScript 6 中好像是这样指定的。见people.mozilla.org/~jorendorff/…以上是关于使用指数的javascript数字文字的主要内容,如果未能解决你的问题,请参考以下文章
Javascript:当幂等于 0 时,用于解决指数问题的 While 循环出现错误