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

如何将包含科学符号的字符串转换为正确的Javascript数字格式,javascript,string,numbers,format,Javascript,String,Numbers,Format,我有一个字符串,例如:“4.874915326E7”。将其转换为javascript数字格式的最佳方式是什么?(整数还是浮点)?如果我尝试parseInt(),则会忽略末尾的E。编辑: 这个答案似乎引起了一些混乱。最初的问题是如何将字符串形式的科学符号转换为数字(以便用于计算)。然而,找到这个答案的人中有相当一部分人似乎认为这是关于将一个由javascript表示为科学符号的数字转换成一种更具表现力的格式。如果这实际上是您的目标(演示),那么您应该将数字转换为字符串。请注意,这意味着您将无法在计

我有一个字符串
,例如:“4.874915326E7”
。将其转换为javascript数字格式的最佳方式是什么?(整数还是浮点)?如果我尝试parseInt(),则会忽略末尾的E

编辑: 这个答案似乎引起了一些混乱。最初的问题是如何将字符串形式的科学符号转换为数字(以便用于计算)。然而,找到这个答案的人中有相当一部分人似乎认为这是关于将一个由javascript表示为科学符号的数字转换成一种更具表现力的格式。如果这实际上是您的目标(演示),那么您应该将数字转换为字符串。请注意,这意味着您将无法在计算中轻松使用它

原始答复: 将其作为字符串传递给Number函数

Number("4.874915326E7") // returns 48749153.26
Number("4E27") // returns 4e+27
将科学记数法中的数字转换为字符串: 这是最好的回答,但从这个问题我个人喜欢。请注意,这个特定的解决方案不适用于负数。为方便起见,以下是一个示例:

(4e+27).toLocaleString('fullwide', {useGrouping:false}) // returns "4000000000000000000000000000"

试试这样的


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

+"4.874915326E7" // == 48749153.26

我有一个这样的值
3.53048874968162e-09
,并使用
Number.toFixed(20)
为我工作:

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

序言

虽然其他答案足够且正确,但为了能够正确解析字符串中的数字,了解类型强制(在您的情况下是转换)是如何工作的(至少在高级别上是这样)是很有用的

强制规则

有一些规则定义在调用实用程序时如何执行转换,如
parseInt
parseFloat
Number
构造函数或
+
一元运算符:

parseInt(,[radix])
函数:

  • 忽略前导空格(
    “24”
    ->
    24
  • 空字符串返回
    NaN
  • 第一个非数字字符完成解析(
    “42answer”
    ->
    42
  • 根据上述规则,小数位也可以完成解析
第三条规则正是为什么忽略指数部分(
ExponentPart
由中定义的
ExponentIndicator
SignedInteger
组成)-一旦遇到
e
字符,解析就会停止,函数返回到目前为止解析的数字。事实上,它会在第一次遇到小数点时停止(请参见最后一条规则)

parseFloat()
parseInt
相同,除了:

  • 它解析第一个小数点
  • 忽略前导的
    0
    (因此无法解析十六进制)
根据经验,在转换为“整数”和
parseFloat
为“浮点”时,应使用
parseInt
(注意,它们实际上是相同的类型)

Number()
构造函数和一元数
+

  • 对于布尔值->
    true
    1
    false
    0

  • 对于
    null
    ->
    0
    (因为
    null
    是错误的)

  • 对于
    未定义的
    ->
    NaN

  • 对于数字:通过

  • 对于字符串:

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

  • 对于符号和大整数->
    TypeError
    被抛出

关于数字格式的说明

由于该问题仍然吸引着与格式有关的答案和评论(已接受的答案有效地说明了这一点),因此应说明:

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

“转换”也有严格的含义,如类型转换(请参阅)

ECMAScript实现双精度64位格式,这是它唯一的“格式”。该问题询问如何将字符串转换为数字格式,因此答案应提供以下信息:

如何将字符串转换为数字给定值表示一个数字在电子符号

参考资料

  • ECMAScript标准中的编号
  • 关于这个话题和其他许多话题,我读过的最好的一本书是:马特·弗里斯比的《面向Web开发人员的专业Javascript》
  • 类型强制解释()

  • 使用MathJs库对我来说效果最好,我尝试了很多这样的答案,但在某些情况下没有一个能正常工作。这很有效。更多

    解决方案,添加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'});
        }
    
    
    函数toPlainString(num){
    返回math.format(num,{notation:'fixed'});
    }
    
    这通常指的是a(有时称为科学E符号,但不管怎样…)更改了问题标题,thanksMine不起作用<代码>编号(“1.7976931348623157e308”)
    @它对我有用
    typeof Number(“1.7976931348623157e308”)
    在控制台中运行确切的代码时为我返回“Number”。在控制台中不使用
    typeof
    运行它会返回数字“1.7976931348623157e+308”。@JosephMarikle但我希望我的数字是标准符号,而不是科学符号
    <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'});
        }