与JS中的Number.toExponential相反

Oz.*_*Oz. 7 javascript numbers scientific-notation

我需要以非指数形式在JavaScript中获取极大数字的值.Number.toFixed只是以指数形式将其作为字符串返回,这比我的更糟糕.

这是Number.toFixed回报:

>>> x = 1e+31
1e+31
>>> x.toFixed()
"1e+31"
Run Code Online (Sandbox Code Playgroud)

Number.toPrecision 也不起作用:

>>> x = 1e+31
1e+31
>>> x.toPrecision( 21 )
"9.99999999999999963590e+30"
Run Code Online (Sandbox Code Playgroud)

我想要的是:

>>> x = 1e+31
1e+31
>>> x.toNotExponential()
"10000000000000000000000000000000"
Run Code Online (Sandbox Code Playgroud)

我可以编写自己的解析器,但如果存在,我宁愿使用本机JS方法.

cas*_*nca 5

您可以使用toPrecision指定要显示多少位的参数:

x.toPrecision(31)
Run Code Online (Sandbox Code Playgroud)

然而,在我测试的浏览器中,上述代码仅适用于 Firefox。根据 ECMAScript 规范, 的有效范围toPrecision是 1 到 21,IE 和 Chrome 都会RangeError相应地抛出 a 。这是因为 JavaScript 中使用的浮点表示实际上无法将数字表示为 31 位精度。


Gen*_*sky 2

答案是没有这样的内置函数。我已经从高处和低处寻找过。这是我用来将数字拆分为符号、系数(小数点前的数字)、小数部分(小数点后的数字)和指数的正则表达式:

/^([+-])?(\d+)\.?(\d*)[eE]([+-]?\d+)$/
Run Code Online (Sandbox Code Playgroud)

答案是“自己动手”,您已经这样做了。