我有一个字符串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"
您还可以+
在字符串前面使用符号来获取数字。
+"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'
使用 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'});
}
前言
尽管其他答案已经足够且正确,但为了能够正确解析字符串中的数字,了解类型强制(在您的情况下为转换)至少在高级别上如何工作很有用。
强制规则
parseInt
当您调用, parseFloat
,Number
构造函数或一元运算符等实用程序时,有一些规则定义了如何执行转换+
:
parseInt(<value>, [radix])
功能:
- 忽略前导空格 (
" 24"
->24
) - 空字符串返回
NaN
- 第一个非数字字符完成解析(
" 42answer"
->42
) - 在上述规则下,小数位也完成解析
第三条规则正是为什么忽略指数部分(ExponentPart
由标准中定义的ExponentIndicator
和组成) - 一旦遇到字符,解析停止并且函数返回到目前为止解析的数字。事实上,它更早停止 - 当第一次遇到小数点时(参见最后一条规则)。SignedInteger
e
parseFloat()
与 相同parseInt
,除了:
- 它解析第一个小数点
- 忽略前导
0
(因此无法解析十六进制)
根据经验,您应该parseInt
在转换为“整数”和parseFloat
“浮点”时使用(注意它们实际上是相同的类型)。
Number()
构造函数和一元+
:
对于 boolean ->
true
to1
,false
to0
对于
null
->0
(因为null
是假的)对于
undefined
->NaN
对于数字:直通
对于字符串:
- 只有数字 [0-9] 字符,以数字或
+
或-
-> 数字(整数)开头 - 相同,但包含浮点 -> 数字(浮点)
- 包含十六进制 -> 数字(整数)
- 空字符串->
0
- 所有其他情况->
NaN
- 只有数字 [0-9] 字符,以数字或
对于对象,
valueOf()
调用它们的方法。如果结果为NaN
,则toString()
调用方法。在引擎盖下,对象被转换为基元,而基元被转换为数字。对于符号和 BigInts ->
TypeError
被抛出
数字格式注意事项
由于该问题仍然吸引与格式有关的答案和评论(如已接受的答案所有效说明的那样),因此应该说明:
应用于编程,“数字格式”有一个严格的含义:
数值的表示“转换”也有严格意义上的类型转换(见标准)
ECMAScript 实现双精度 64 位格式,这是它唯一的“格式”。该问题询问有关将 String 转换为数字格式的问题,因此答案应提供以下信息:
给定值表示电子符号中的数字,如何将字符串转换为数字
参考