【发布时间】:2020-11-14 00:43:04
【问题描述】:
我有以下函数,我认为可以将非常大的数字(例如 1e+24)和非常小的数字(例如 1e-18)转换为固定字符串,例如 10000000000000000000000000:
convertExponentialToDecimal (exponentialNumber) {
// Sanity Check - i.e., is it exponential number?
const str = exponentialNumber.toString()
if (str.indexOf('e-') !== -1) {
const exponent = parseInt(str.split('-')[1], 10)
return exponentialNumber.toFixed(exponent)
}
if (str.indexOf('e+') !== -1) {
const exponent = parseInt(str.split('+')[1], 10)
return exponentialNumber.toFixed(exponent)
}
return exponentialNumber
}
但是,对于非常大的数字 - 该过程似乎不起作用...
即,1e+24 的转换产生 1e+24,但 1e-18 产生 0.000000000000000001,正如预期的那样。
任何人都可以发现明显的问题,或者对这种情况有任何指示甚至他们自己的工作解决方案...
如果这是任何见解 - 它适用于任何小于 1e+21 ...
【问题讨论】:
-
.toFixed()的数字参数从 0 到 20。 -
你可以试试
.toPrecision()。 -
您也可以使用
Math.ceil(Math.log10(n))之类的东西来获取您需要的(可能是负数)位数。 -
请记住,JavaScript 数字是 base-2 浮点值,它们不能提供无限精度。
-
问题是您要寻找的原材料实际上并不存在于数量中。对于大指数,不存在低端数字。只有 51 位二进制小数的空间,甚至连 16 位十进制数字都没有。
标签: javascript numbers