2013-04-20 29 views
3

我遇到了此問題。它使用parseFloat或parseInt添加數字。 IF TextBox1的值是4,TextBox2中值是2,那麼我得到輸出(見腳本)如果不在JavaScript中使用parseFloat,則無法正確添加兩個數字

我的疑問是,爲什麼在此外單獨

parseFloat($('#txt1').val()) + parseFloat($('#txt2').val())

給出正確的值,但

parseFloat($('#txt1').val() + $('#txt2').val())

不給正確的值,而

  • parseFloat($('#txt1').val() - $('#txt2').val())
  • parseFloat($('#txt1').val()/$('#txt2').val())
  • parseFloat($('#txt1').val() * $('#txt2').val())

是給正確的值。 它很簡單,但我找不到解決方案。

===== jQuery的

function Calculate() {            //--> Output 
    $('#lbl1').html(parseFloat($('#txt1').val() + $('#txt2').val())); //--> 42 
    $('#lbl2').html(parseFloat($('#txt1').val()) + parseFloat($('#txt2').val())); //--> 6 
    $('#lbl3').html(parseFloat(4 + 2));        //--> 6 

    $('#lbl4').html(parseFloat($('#txt1').val() - $('#txt2').val())); //--> 2 
    $('#lbl5').html(parseFloat($('#txt1').val() * $('#txt2').val())); //--> 8 
    $('#lbl6').html(parseFloat($('#txt1').val()/$('#txt2').val())); //--> 2 
    } 

===== HTML

<table> 
     <tr> 
      <td> 
       <input type="text" id="txt1" /> 
      </td> 
      <td> 
       <input type="text" id="txt2" /> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <input type="button" value="Calculate" onclick="Calculate()" /> 
      </td> 
      <td> 
       <label id="lbl1"> 
       </label> 
       | 
       <label id="lbl2"> 
       </label> 
       | 
       <label id="lbl3"> 
       </label> 
       | 
       <label id="lbl4"> 
       </label> 
       | 
       <label id="lbl5"> 
       </label> 
       | 
       <label id="lbl6"> 
       </label> 
      </td> 
     </tr> 
    </table> 
+3

這是因爲+運算符也用於字符串,而 - 和*運算符則不用。用這種寬鬆的語言,你會得到這種行爲。 – Kaiwa 2013-04-20 07:46:42

+1

我很驚訝沒有人建議優秀的jQuery算術插件。 – 2015-06-21 08:49:51

回答

10

$.val()返回一個字符串值。

所以在你的第一個例子中,你將兩個返回的字符串都轉換爲數字,並且計算很好。

如果您使用parseFloat($('#txt1').val() + $('#txt2').val())+不作爲算術運算符,但作爲字符串連接。所以你將這兩個字符串連接起來並在之後進行轉換,這會給出錯誤的結果。

使用-中的示例將工作,因爲存在使用-沒有字符串操作和由此承滴盤值獲得隱式轉換爲數字施加操作之前。

1

$('#txt1').val() + $('#txt2').val()它給字符串值

不能使用 - 對,*,/運營商字符串

parseFloat($('#txt1').val()), parseFloat($('#txt2').val())返回數字不是字符串

相關問題