Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript数字连接而不是添加,但typeof不是字符串_Javascript_Jquery - Fatal编程技术网

Javascript数字连接而不是添加,但typeof不是字符串

Javascript数字连接而不是添加,但typeof不是字符串,javascript,jquery,Javascript,Jquery,我是javaScript新手。我正在制作一台计算器 我已将输入值存储在变量中,以便最终可以根据输入操作结果以执行计算。现在我只想把所有的值加在一起 然而,它们不是在添加,而是在连接。我使用parseInt阻止javascript将数字视为字符串,typeOf显示它们是数字 以下是我的javascript: $(document).ready(function() { var theTerm = $("#theTerm").val(); var theRate = $("#theRate").v

我是javaScript新手。我正在制作一台计算器

我已将输入值存储在变量中,以便最终可以根据输入操作结果以执行计算。现在我只想把所有的值加在一起

然而,它们不是在添加,而是在连接。我使用parseInt阻止javascript将数字视为字符串,typeOf显示它们是数字

以下是我的javascript:

$(document).ready(function() {

var theTerm = $("#theTerm").val();
var theRate = $("#theRate").val();
var thePrice = $("#thePrice").val();
var theTax = $("#theTax").val();
var theDown = $("#theDown").val();
var theTrade = $("#theTrade").val();
var theResult = parseInt(theTerm + theRate + thePrice + theTax + theDown + theTrade, 10);

$("#calculate").click(function(){
    alert(theResult);
    alert(typeof(theResult));
});

}); 
以及HTML:

<div id="calculator">
<span id="calculatorHeader">Monthly Payment Calculator</span>
<table style="margin:0 auto;">
    <tr>
    <td style="width:40px;">Term
        <input id="theTerm" size="5" value="7" name="term" style="width:35px" />
    </td>
    <td style="width:40px;">Rate(%)
        <input id="theRate" size="5" value="7" name="apr" style="width:35px" />
    </td>
    <td style="width:55px;">Price($)
        <input id="thePrice" size="6" maxlength="7" name="price" style="width:50px" value="7" />
    </td>
    <td style="width:40px;">Tax(%)
        <input id="theTax" size="4" maxlength="7" name="tax" style="width:35px" value="7" />
    </td>
    <td style="width:40px;">Down($)
        <input id="theDown" size="5" maxlength="7" name="downPmt" style="width:35px" value="7" />
    </td>
    <td style="width:40px;">Trade($)
        <input id="theTrade" size="5" maxlength="7" name="trade" style="width:35px" value="7" />
    </td>
    <td style="width:78px;">Est.Monthly Pmt
        <input id="theResult" size="7" maxlength="7" name="result" style="width:75px" value="0" />
    </td>
    </tr>
</table>
<button type="button" id="calculate">Add Boxes!</button>
</div>

每月付款计算器
学期
比率(%)
价格(元)
税金(%)
下跌(元)
贸易额(元)
预计每月Pmt
添加框!

将字符串与
+
连接,然后将连接的结果转换为int

您希望在添加之前转换为整数。比如:

var theTerm = parseInt($("#theTerm").val(), 10);
...
var theResult = theTerm + theRate + thePrice + theTax + theDown + theTrade;

更改行并将parseInt应用于每个对象,如下所示

var theResult = parseInt(theTerm) + parseInt(theRate) + parseInt(thePrice) + parseInt(theTax) + parseInt(theDown) + parseInt(theTrade);

您必须使用java脚本的parseInt函数

例如:
var theTerm=parseInt($(“#theTerm”).val()


稍微整理一下代码,避免重复:

$(文档).ready(函数(){
$(“#计算”)。单击(函数(){
var inputs=$(“input”),结果=0;//`inputs`是所有输入元素的列表
for(var i=0;i
您可以将数字乘以
1,而不是使用
parseInt
。这是一种更快更简单的数据类型转换方法

$(document).ready(function () {
    var theTerm = $("#theTerm").val() * 1;
    var theRate = $("#theRate").val() * 1;
    var thePrice = $("#thePrice").val() * 1;
    var theTax = $("#theTax").val() * 1;
    var theDown = $("#theDown").val() * 1;
    var theTrade = $("#theTrade").val() * 1;
    var theResult = theTerm + theRate + thePrice + theTax + theDown + theTrade;

    $("#calculate").click(function () {
        alert(theResult);
        alert(typeof (theResult));
    });
});


jsiddle:

对每个数字使用
parseInt
,然后对它们进行汇总。
parseInt
并不是一个让所有内容都被视为数字的环境。它是一个接受字符串并返回整数的函数。你有几根弦;获取几个整数。您缺少的是
.val()
返回用户键入的字符串。当您添加字符串时,会得到另一个字符串。如果你加上“13”+“26”,你得到的是“1326”,而不是39。@jfriend00我通过使用typeOf找到了答案,谷歌搜索了该做什么,然后在我的原始帖子中使用了代码(使用parseInt)。奇怪的是,typeOf返回了“number”,但仍然像字符串一样连接结果!您添加了字符串,然后将其转换为数字。你必须先转换成一个数字,然后再加上。我只是想解释一下你的答案。。。ParseInt中的第二个参数是请求数字的基数。所以基数10是一个由0-9组成的数字。基数16为十六进制,其中数字用0-F表示。OK!现在,我不必在每次构建变量时都使用parseInt。这确实有效,但我不想在每次需要变量时都使用parseInt。这是唯一的方法吗?是的,必须将字符串转换为整数值,您也可以尝试@mohit pandey的答案将字符串转换为int。@HelloWorld您不需要每次都使用它并重复自己的操作,。您确实应该使用
10
作为
parseInt
函数的第二个参数。现在,您只需使用
var theResult=[theTerm,theRate,thePrice,theTax,theDown,theTrade]。reduce((a,b)=>a+Number(b),0)
。如果您想要快速而紧凑,那么只需在其中的
+
中添加一个:
var theTerm=+$(“#theTerm”).val()
。就个人而言,我不认为这些“技巧”转换像显式数字转换那样可读(很容易错过开发人员的意图)。@jfriend00这两种转换都可以工作。根据具体情况,我可以看到这些方法中的每一种在哪里有用。您确实需要添加base#参数,不是吗?为了进行简单的加法,这是最佳选择。然而,正如我在问题中所说,这将是一个计算器,它将执行除简单地在字段中添加数字之外的其他功能。当我想在总数中乘以或添加一个百分比时,我不确定您的解决方案是否有效。@HelloWorld好的,我知道您不会只执行加法。抱歉。@HelloWorld P.S.您可能对
parseFloat
感兴趣,因为如果用户输入十进制值,如
2.2
,那么如果您使用
parseInt
,它将变成
2
,明白了!parseInt将数据类型转换为整数。parseFloat将数据类型转换为浮点数。
$(document).ready(function () {
    var theTerm = $("#theTerm").val() * 1;
    var theRate = $("#theRate").val() * 1;
    var thePrice = $("#thePrice").val() * 1;
    var theTax = $("#theTax").val() * 1;
    var theDown = $("#theDown").val() * 1;
    var theTrade = $("#theTrade").val() * 1;
    var theResult = theTerm + theRate + thePrice + theTax + theDown + theTrade;

    $("#calculate").click(function () {
        alert(theResult);
        alert(typeof (theResult));
    });
});