2014-04-10 17 views
0

我有以下的計算:parseInt函數()使javascript函數的返回值是0.77倍預期的結果,麥冬指定爲十進制

$(function() { 
     $("#x").click(function() 
      { 
      var n1 = parseFloat(76790); 
      var n2 = parseFloat(5.3/100); 
      var n3 = parseFloat(1.6); 
      n3 = parseInt(n3, 10); 

      var result = n1*(n2+(n2*n3)); 

      $("#qid_185").val(result); 
      } 
    ); 
}); 

它返回其是1.3倍的預期的結果的值。如果我刪除parseInt行n3 = parseInt(n3, 10);值與預期的一樣。

我意識到parseint行不是必需的,所以我可以刪除它來修復它,但我想明白爲什麼會發生這種情況?我在基數中指定小數。

Js fiddle with parsint line

Js fiddle without parsint line

擊中X按鈕以運行計算 - 正確的值是10581.662,parsint值是0.77倍於此。

+0

因爲你覆蓋N3一個整數,並且在使用計算。 –

+1

不知道你還有什麼期望......? –

回答

4
parseFloat(1.6) => 76790 * ((5.3/100) + ((5.3/100)*1.6)) => 76790 * 0.1378 => 10581.662 

parseInt(1.6, 10) => 76790 * ((5.3/100) + ((5.3/100)*1)) => 76790 * 0.106 => 8139.74 

不同的是parseFloat給你小數值,parseInt函數切斷小數點(一個或多個)。

爲了進一步闡述以'10'爲基數,我相信你誤解了術語'decimal'作爲基數的用法。這意味着它的基數爲10,這是您的標準數字系統爲「整數」(http://en.wikipedia.org/wiki/Decimal),而不是「小數部分」,如1.6中的'.6'。

其他例子是以下幾點:

基數的2

- 八路,16的基數 - - 8的二進制,十六進制基數

+0

啊,我不明白,parseInt只給了整數,但是當我寫我意識到這是多麼愚蠢的是我! – Gideon