轉換如何1e+30
轉換爲1000000000000000000000000000000數在1E + 30
我想數字,因爲它是由用戶輸入的不一樣轉換1e+30
。
這怎麼能實現呢?有沒有什麼辦法在解析後顯示實際數字float or int?
轉換如何1e+30
轉換爲1000000000000000000000000000000數在1E + 30
我想數字,因爲它是由用戶輸入的不一樣轉換1e+30
。
這怎麼能實現呢?有沒有什麼辦法在解析後顯示實際數字float or int?
您可以使用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中浮點數學的限制。
對於浮點值它不起作用http://jsfiddle.net/GuLYN/927/ – Sadikhasan 2014-12-19 08:24:26
@Sadikhasan它正在工作。首先它被轉換爲'1e + 28'並且工作正常。 – 2014-12-19 08:26:51
'parseFloat((1000000000000000000000000.55)'是eqaul到'1e + 28' – 2014-12-19 08:27:57
核心庫不支持您對不適合原生number
類型的數字提供任何支持,因此您可能希望使用第三方庫來幫助處理大數字。
例如,https://mikemcl.github.io/decimal.js/
new Decimal('1e+30').toFixed()
// "1000000000000000000000000000000"
我認爲你的意思是核心**語言** .--) – RobG 2014-12-19 08:26:56
@RobG Meh。我知道這是JS使用的術語,但它很愚蠢。 – 2014-12-19 08:35:49
請給我舉個例子,我被這個問題困住了。 – Sadikhasan 2014-12-19 09:35:56
您可以使用toLocaleString
(1000000000000000000000000000000).toLocaleString("en-US", { useGrouping: false })
它是否爲浮點數? – Sadikhasan 2014-12-19 11:23:03
@Sadikhasan它使用浮點數(在JS中整數和浮點數沒有區別)。然而,如此巨大的數字你不能有小數精度(實際上,'1000000000000000000000000000000 == 1000000000000000010000000000000')。 – Oriol 2014-12-19 15:30:14
這應該是答案!它的工作原理非常簡單。 – gsubiran 2015-09-11 19:06:32
怎麼樣'1e30'? :) – 2014-12-19 08:23:19
你確實意識到JavaScript無法處理30位數字的權利? – 2014-12-19 08:30:44
@ RokoC.Buljan這是我的要求,保持在實際數字。 – Sadikhasan 2014-12-19 08:32:30