如何转换包含科学记数法的字符串以更正Javascript数字格式

时间:2012-06-08 06:27:12

标签: javascript string numbers format

我有一个字符串,例如:“4.874915326E7”。将其转换为javascript数字格式的最佳方法是什么? (int还是float)?如果我尝试使用parseInt(),则忽略最后的E.

6 个答案:

答案 0 :(得分:55)

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

Number("4.874915326E7") //returns 48749153.26

答案 1 :(得分:9)

尝试这样的事情

Demo

Number("4.874915326E7").toPrecision()

答案 2 :(得分:6)

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

+"4.874915326E7" // == 48749153.26

答案 3 :(得分:3)

我有一个类似3.53048874968162e-09的值,并且使用Number.toFixed(20)对我有用:

value = new Number('3.53048874968162e-09')
//[Number: 3.53048874968162e-9]
value.toFixed(20)
//'0.00000000353048874968'

答案 4 :(得分:1)

序言

虽然其他答案是足够且正确的,以便能够从字符串中正确解析数字,但了解类型强制(在您的情况下为转换)如何至少在较高的层次上起作用是很有用的。

强制规则

有一些规则定义了在调用parseIntparseFloatNumber构造函数或+一元运算符之类的实用程序时如何执行转换:

parseInt(<value>, [radix])功能:

  • 忽略前导空格(" 24"-> 24
  • 空字符串返回NaN
  • 第一个非数字字符完成解析(" 42answer"-> 42
  • 根据上述规则,小数位也将完成解析

第三个规则就是为什么指数部分(ExponentPartstandard中定义的ExponentIndicatorSignedInteger组成)的原因-{{1} }遇到char,解析停止,并且该函数返回到目前为止已解析的数字。实际上,它会更早停止-当第一次遇到小数点时(请参阅最后一条规则)。

eparseFloat()相同,除了:

  • 它解析第一个小数点
  • 忽略前导parseInt(因此无法解析十六进制)

根据经验,转换为“整数”时应使用0,而转换为“ float”时应使用parseInt(请注意,它们实际上是同一类型)。

parseFloat构造函数和一元Number()

  • 对于布尔值->从+true,从1false

  • 对于0-> null(因为0虚假)

  • 对于null-> undefined

  • 对于数字:直通

  • 对于字符串:

    • 仅数字[0-9]个字符,以数字或NaN+->数字(整数)开头
    • 相同,但包含浮点->数字(浮点)
    • 包含十六进制->数字(整数)
    • 空字符串-> -
    • 所有其他情况-> 0
  • 对于对象,将调用其NaN方法。如果结果为valueOf(),则调用NaN方法。在引擎盖下,将对象转换为基本体,然后将该基本体转换为数字。

  • 对于符号和BigInts->抛出toString()

数字格式注释

由于该问题仍吸引着与格式有关的答案和评论(如已接受的答案有效说明),因此应指出:

在编程中,“数字格式” 具有严格的含义:
数字的表示形式

“转换” 也具有严格的含义,称为类型转换(请参见standard

ECMAScript实现双精度64位格式,这是它唯一的“格式”。该问题询问有关将字符串转换为数字格式的问题,因此希望提供有关以下内容的信息:

在给定值表示电子表示形式的数字的情况下,如何将String转换为Number

参考

  1. 在ECMAScript标准中TypeError abstract operation
  2. 我在该主题以及其他许多主题上获得的最佳读物之一:Matt Frisbie的“面向Web开发人员的专业Javascript”。
  3. 解释类型强制(blog post

答案 5 :(得分:0)

使用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'});
    }