如何将1e+30
转换为1000000000000000000000000000000
我想要用户输入的号码不要像1e+30
那样进行转换。
怎么能实现这个目标?在解析为浮动或 int 之后,有没有办法显示实际数字?
答案 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 })