数字转换为1e + 30

时间:2014-12-19 08:03:14

标签: javascript

如何将1e+30转换为1000000000000000000000000000000

我想要用户输入的号码不要像1e+30那样进行转换。

怎么能实现这个目标?在解析为浮动 int 之后,有没有办法显示实际数字?

3 个答案:

答案 0 :(得分:5)

核心库无法为不适合原生number类型的数字提供任何支持,因此您可能希望使用第三方库来帮助你有大小数。

例如,https://mikemcl.github.io/decimal.js/

new Decimal('1e+30').toFixed()
// "1000000000000000000000000000000"

答案 1 :(得分:3)

您可以使用new Array()String.replace,但它只能采用String

的形式
function toNum(n) {
   var nStr = (n + ""); 
   if(nStr.indexOf(".") > -1) 
      nStr = nStr.replace(".","").replace(/\d+$/, function(m){ return --m; });
   return nStr.replace(/(\d+)e\+?(\d+)/, function(m, g1, g2){
      return g1 + new Array(+g2).join("0") + "0";
   })
}
console.log(toNum(1e+30)); // "1000000000000000000000000000000"

现在它更加强大,因为即使在12e100被删除之后提供了1.2e+101这样一个非常大的数字(例如.)也不会失败。最后一组数字递减一次。但仍然无法确保100%的准确性,但这是因为javascript中的浮点数学的局限性。

答案 2 :(得分:3)

您可以使用toLocaleString

(1000000000000000000000000000000).toLocaleString("en-US", { useGrouping: false })