我有一个字符串,例如:“4.874915326E7”。将其转换为javascript数字格式的最佳方法是什么? (int还是float)?如果我尝试使用parseInt(),则忽略最后的E.
答案 0 :(得分:55)
将其作为字符串传递给Number函数。
Number("4.874915326E7") //returns 48749153.26
答案 1 :(得分:9)
答案 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)
序言
虽然其他答案是足够且正确的,以便能够从字符串中正确解析数字,但了解类型强制(在您的情况下为转换)如何至少在较高的层次上起作用是很有用的。
强制规则
有一些规则定义了在调用parseInt
,parseFloat
,Number
构造函数或+
一元运算符之类的实用程序时如何执行转换:
parseInt(<value>, [radix])
功能:
" 24"
-> 24
)NaN
" 42answer"
-> 42
)第三个规则就是为什么指数部分(ExponentPart
由standard中定义的ExponentIndicator
和SignedInteger
组成)的原因-{{1} }遇到char,解析停止,并且该函数返回到目前为止已解析的数字。实际上,它会更早停止-当第一次遇到小数点时(请参阅最后一条规则)。
e
与parseFloat()
相同,除了:
parseInt
(因此无法解析十六进制)根据经验,转换为“整数”时应使用0
,而转换为“ float”时应使用parseInt
(请注意,它们实际上是同一类型)。
parseFloat
构造函数和一元Number()
:
对于布尔值->从+
到true
,从1
到false
对于0
-> null
(因为0
虚假)
对于null
-> undefined
对于数字:直通
对于字符串:
NaN
或+
->数字(整数)开头-
0
对于对象,将调用其NaN
方法。如果结果为valueOf()
,则调用NaN
方法。在引擎盖下,将对象转换为基本体,然后将该基本体转换为数字。
对于符号和BigInts->抛出toString()
数字格式注释
由于该问题仍吸引着与格式有关的答案和评论(如已接受的答案有效说明),因此应指出:
在编程中,“数字格式” 具有严格的含义:
数字的表示形式“转换” 也具有严格的含义,称为类型转换(请参见standard)
ECMAScript实现双精度64位格式,这是它唯一的“格式”。该问题询问有关将字符串转换为数字格式的问题,因此希望提供有关以下内容的信息:
在给定值表示电子表示形式的数字的情况下,如何将String转换为Number
参考
TypeError
abstract operation 答案 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'});
}