![](/img/trans.png)
[英]How to convert big negative scientific notation number into decimal notation string in javascript?
[英]How to convert a String containing Scientific Notation to correct Javascript number format
我有一个字符串, eg: "4.874915326E7"
。 将其转换为 javascript 数字格式的最佳方法是什么? (整数或浮点数)? 如果我尝试 parseInt(),最后的E将被忽略。
这个答案似乎引起了一些混乱。 最初的问题是询问如何将字符串形式的科学记数法转换为数字(以便它可以用于计算)。 然而,找到这个答案的相当多的人似乎认为这是将一个由 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'
前言
虽然其他答案已经足够且正确,但为了能够正确解析字符串中的数字,了解类型强制(在您的情况下为转换)的工作方式至少在高层次上是有用的。
强制规则
有一些规则定义了在调用parseInt
、 parseFloat
、 Number
构造函数或+
一元运算符等实用程序时如何执行转换:
parseInt(<value>, [radix])
函数:
" 24"
-> 24
)NaN
" 42answer"
-> 42
)第三条规则正是为什么指数部分( ExponentPart
由ExponentIndicator
和SignedInteger
组成,如标准中定义的那样)被忽略 - 一旦遇到e
字符,解析就会停止并且函数返回到目前为止解析的数字。 事实上,它会更早停止——当第一次遇到小数点时(见最后一条规则)。
parseFloat()
与parseInt
相同,除了:
0
(因此无法解析十六进制) 作为一个经验法则,你应该使用parseInt
转换为“整数”,当parseFloat
“浮动”(注意,它们实际上是同一类型)。
Number()
构造函数和一元+
:
对于 boolean -> true
到1
, false
到0
对于null
-> 0
(因为null
是假的)
对于undefined
-> NaN
对于数字:直通
对于字符串:
+
或-
-> 数字(整数)开头0
NaN
对于对象,调用它们的valueOf()
方法。 如果 result 是NaN
,则调用toString()
方法。 在幕后,对象被转换为原始对象,而原始对象被转换为数字。
对于符号和 BigInts -> TypeError
数字格式注意事项
由于该问题仍然吸引与格式有关的答案和评论(如已接受的答案所有效说明),因此应说明:
应用于编程时, “数字格式”有严格的含义:
数值的表示“转换”作为类型转换也有严格的含义(参见标准)
ECMAScript 实现了双精度 64 位格式,这是它唯一的“格式”。 该问题询问将 String 转换为数字格式,因此答案应提供以下信息:
给定值表示电子符号中的数字,如何将字符串转换为数字
参考
使用 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'});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.