如何将包含科学记数法的字符串转换为正确的 Javascript 数字格式

IT技术 javascript string numbers format
2021-01-31 17:00:37

我有一个 String e.g: "4.874915326E7"将其转换为 javascript 数字格式的最佳方法是什么?(整数或浮点数)?如果我尝试 parseInt(),最后的E将被忽略。

6个回答

编辑:

这个答案似乎引起了一些混乱。最初的问题是问如何将字符串形式的科学记数法转换为数字(以便它可以用于计算)。然而,找到这个答案的很多人似乎认为这是将一个由 javascript 表示为科学记数法的数字转换为更易于展示的格式。如果这实际上是您的目标(演示),那么您应该将数字转换为字符串。请注意,这意味着您将无法轻松地在计算中使用它。

原答案:

将其作为字符串传递给 Number 函数。

Number("4.874915326E7") // returns 48749153.26
Number("4E27") // returns 4e+27

将科学记数法中的数字转换为字符串:

这是另一个问题的最佳答案,但从那个问题来看,我个人喜欢使用.toLocaleString(). 请注意,该特定解决方案不适用于负数。为了您的方便,这里有一个例子:

(4e+27).toLocaleString('fullwide', {useGrouping:false}) // returns "4000000000000000000000000000"
我的不工作。 Number("1.7976931348623157e308")
2021-03-14 17:00:37
@JosephMarikle,但我希望我的数字采用标准符号而不是科学符号。
2021-03-14 17:00:37
谢谢回复。我可以这样转换,但如果我愿意,一些数字会丢失。例如。我有一个递归函数,其中最后一个答案是 4.12345678e10,如果我将其转换为标准符号,结果将是 41234567800,其中最后两位数字 00 实际上不是 00。所以如果有办法防止转换为科学记数法或任何其他黑客。
2021-03-15 17:00:37
@The_ehT 啊!这就说得通了。这个问题是关于如何将其转换为“javascript 数字格式”,大概是为了允许使用它和其他数字,对数值执行数学运算。您想将您的格式转换为扩展格式,您需要一个字符串。试试这个答案:stackoverflow.com/questions/16139452/...
2021-03-30 17:00:37
@The_ehT 它对我有用。 typeof Number("1.7976931348623157e308")当我在控制台中运行该确切代码时,为我返回“数字”。在控制台中运行它而不typeof返回数字“1.7976931348623157e+308”。
2021-03-31 17:00:37

尝试这样的事情

演示

Number("4.874915326E7").toPrecision()
.toPrecision() 此处不需要,如果精度低于提供的字符串,则添加科学记数法。
2021-04-13 17:00:37
Number("2.2356434336665664e+51").toPrecision() 这不起作用..请帮我纠正这个问题。
2021-04-13 17:00:37

您还可以+在字符串前使用符号来获取数字。

+"4.874915326E7" // == 48749153.26
也适用于变量,即使在字符串中:x="1e3"; ":"+(+x)给出“:1000”。
2021-03-15 17:00:37

我有这样的value,3.53048874968162e-09并且使用Number.toFixed(20)对我有用:

value = new Number('3.53048874968162e-09')
//[Number: 3.53048874968162e-9]
value.toFixed(20)
//'0.00000000353048874968'
另外,你不应该new Number()仅仅为了执行类型转换而创建新的 Number 对象Number()直接使用(将返回一个原始类型)
2021-03-14 17:00:37
请考虑添加解释为什么它起作用和参考,特别是在向旧问题添加一个时(此类答案进入审查队列)。请注意,问题不是关于格式化表示数字的字符串,而是关于转换为数字格式(尽管考虑到 q. 是如何制定的,这种混淆是可以理解的)。
2021-03-16 17:00:37

使用 MathJs 库对我来说效果最好,尝试了很多这些答案,但在某些情况下没有一个能正常工作。这工作得很好。更多信息请访问https://mathjs.org/

解决方案,添加 MathJS 然后像这样调用它:

<script src="https://cdn.jsdelivr.net/npm/mathjs@8.0.1/lib/browser/math.js"  crossorigin="anonymous"></script>
    
    function toPlainString(num) {
        return math.format(num,  {notation: 'fixed'});
    }