2014-12-19 36 views
3

轉換如何1e+30轉換爲1000000000000000000000000000000數在1E + 30

我想數字,因爲它是由用戶輸入的不一樣轉換1e+30

這怎麼能實現呢?有沒有什麼辦法在解析後顯示實際數字float or int

+0

怎麼樣'1e30'? :) – 2014-12-19 08:23:19

+0

你確實意識到JavaScript無法處理30位數字的權利? – 2014-12-19 08:30:44

+0

@ RokoC.Buljan這是我的要求,保持在實際數字。 – Sadikhasan 2014-12-19 08:32:30

回答

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中浮點數學的限制。

+0

對於浮點值它不起作用http://jsfiddle.net/GuLYN/927/ – Sadikhasan 2014-12-19 08:24:26

+0

@Sadikhasan它正在工作。首先它被轉換爲'1e + 28'並且工作正常。 – 2014-12-19 08:26:51

+0

'parseFloat((1000000000000000000000000.55)'是eqaul到'1e + 28' – 2014-12-19 08:27:57

5

核心庫不支持您對不適合原生number類型的數字提供任何支持,因此您可能希望使用第三方庫來幫助處理大數字。

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

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

我認爲你的意思是核心**語言** .--) – RobG 2014-12-19 08:26:56

+0

@RobG Meh。我知道這是JS使用的術語,但它很愚蠢。 – 2014-12-19 08:35:49

+0

請給我舉個例子,我被這個問題困住了。 – Sadikhasan 2014-12-19 09:35:56

3

您可以使用toLocaleString

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

它是否爲浮點數? – Sadikhasan 2014-12-19 11:23:03

+0

@Sadikhasan它使用浮點數(在JS中整數和浮點數沒有區別)。然而,如此巨大的數字你不能有小數精度(實際上,'1000000000000000000000000000000 == 1000000000000000010000000000000')。 – Oriol 2014-12-19 15:30:14

+0

這應該是答案!它的工作原理非常簡單。 – gsubiran 2015-09-11 19:06:32