2013-04-22 79 views
4

converter_scientific_notation_to_decimal_notation( '1.34E-15')或converter_scientific_notation_to_decimal_notation(1.34E-15)如何在javascript中將大負面科學記數法轉換爲十進制記數法字符串?

> '0.00000000000000134'

converter_scientific_notation_to_decimal_notation( '2.54E-20')或 converter_scientific_notation_to_decimal_notation(2.54E-20)

> '0.000000000000000000254'

是否這樣的功能在Javascript中存在嗎?

parseFloat不利於大的負面科學號碼。

parseFloat('1.34E-5') => 0.0000134 
parseFloat('1.34E-15') => 1.34e-15 

回答

14

這適用於任何正面或負面的與指數 'E',積極或消極的。 (可以通過前綴「+」的數值字符串轉換爲數字,或使之成爲串的方法,或任何物體的方法,並調用字符串或數字。)

Number.prototype.noExponents= function(){ 
    var data= String(this).split(/[eE]/); 
    if(data.length== 1) return data[0]; 

    var z= '', sign= this<0? '-':'', 
    str= data[0].replace('.', ''), 
    mag= Number(data[1])+ 1; 

    if(mag<0){ 
     z= sign + '0.'; 
     while(mag++) z += '0'; 
     return z + str.replace(/^\-/,''); 
    } 
    mag -= str.length; 
    while(mag--) z += '0'; 
    return str + z; 
} 

var n=2.54E-20; 
n.noExponents(); 

返回值:

"0.0000000000000000000254" 
+0

這是我正在尋找。謝謝!太糟糕了,Javascript沒有內置的功能。我仍然不明白爲什麼parseFloat的工作方式與大負面的科學記數法不同,而不是適度的負面科學記數法。 – vajrasky 2013-04-22 06:41:12

2

您可以使用toFixed:(1.34E-15).toFixed(18)回報0.000000000000001340

+1

不幸的是,這不會對第二個例子的工作:'(2.54e-20).toFixed(20)'發來代替。 – Reid 2013-04-22 04:49:16

+3

另外,如果指數大於20,[* toFixed *](http://www.ecma-international.org/ecma-262/5.1/)將會拋出一個範圍錯誤,除了oin。 – RobG 2013-04-22 05:10:21

相關問題