2013-04-20 58 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())返回数字不是字符串

相关问题