Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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 乘法后,js返回number和NaN_Javascript_Android_Input_Cordova - Fatal编程技术网

Javascript 乘法后,js返回number和NaN

Javascript 乘法后,js返回number和NaN,javascript,android,input,cordova,Javascript,Android,Input,Cordova,我正在使用PhoneGap构建一个android应用程序。我多次从数字输入中获取值,一切正常,但在某一时刻,它的行为异常: 我从数字输入中获取值,并将其解析为整数——一切正常。但当我乘以这些值时,它会给我一个值+NaN,看起来是这样的: var d1; var d2; var d3; d1 = parseInt($('input.inputOne').val()); d2 = parseInt($('input.inputtwo').val()); d3 = ((d1*d2)/10000).to

我正在使用PhoneGap构建一个android应用程序。我多次从数字输入中获取值,一切正常,但在某一时刻,它的行为异常:

我从数字输入中获取值,并将其解析为整数——一切正常。但当我乘以这些值时,它会给我一个值+NaN,看起来是这样的:

var d1;
var d2;
var d3;
d1 = parseInt($('input.inputOne').val());
d2 = parseInt($('input.inputtwo').val());
d3 = ((d1*d2)/10000).toFixed(2);
在控制台中,它为我提供了值:

d1
100
d2
200
d3
2.00NaN NaN NaN
但如果我把d3放进一些DOM元素,它只会给我

NaN
我以前在这个应用程序中做过类似的事情,一切都很好-我不知道为什么在这个特殊情况下它不起作用-有什么建议吗

编辑:

有趣的事情-即使我做了,例如

d3 = d2;
它给了我

d3
200NaN NaN NaN
编辑2:

更有趣的事情-如果我不解析从输入(d1和d2)获取的int值,乘法后它会给出:

d3
2.00undefined undefined NaN

我很清楚这里的问题是什么。 您忘记了在从输入元素获取值之前进行验证。 我为你做了一个小提琴演示。你可以看看。 若您将输入元素中的值更改为非数字的值(如“abc”);当你试图将它解析为float时:它会给你一个NaN的错误。。因为它“不是一个数字”。我希望这有帮助。

此外,要仅验证数字的输入值,您可以参考以下内容:

或者,您可以使用“onkeyup”事件检查用户在输入框中输入的值的类型

注:JSFIDLE上的代码:-

$(document).ready(function () {
    // Handler for .ready() called.
    var myVar = $("#validate_info").find('.inputOne').val();
    console.log(myVar);
    var output1 = $('input.inputOne').val();
    console.log(output1);
    var output2 = $('input.inputTwo').val();
    console.log(output2);
    $('#result').html(output1);
    // Starts
    var d1;
    var d2;
    var d3;
    d1 = parseFloat($('input.inputOne').val());
    d2 = parseFloat($('input.inputTwo').val());
    d3 = ((d1 * d2) / 10000).toFixed(2);
    console.log(" With parseFloat d1:" + d1 + ",  d2:" + d2 + ",   d3/result:" + d3);


    d1 = parseInt($('input.inputOne').val());
    d2 = parseInt($('input.inputTwo').val());
    d3 = ((d1 * d2) / 10000).toFixed(2);
    console.log(" With parseInt d1:" + d1 + ",  d2:" + d2 + ",   d3/result:" + d3);

});


    <div id="validate_info">
        <input id="id1" type="text" class="inputOne" value="100" name="abc">
        <input id="id2" type="text" class="inputTwo" value="200" name="abcef">
    </div>
    <br>
    <div id="result"></div>
$(文档).ready(函数(){
//调用了.ready()的处理程序。
var myVar=$(“#验证_信息”).find('.inputOne').val();
console.log(myVar);
var output1=$('input.inputOne').val();
控制台日志(output1);
var output2=$('input.inputwo').val();
控制台日志(output2);
$('#result').html(output1);
//开始
变量d1;
var-d2;
var-d3;
d1=parseFloat($('input.inputOne').val());
d2=parseFloat($('input.inputwo').val());
d3=((d1*d2)/10000.toFixed(2);
console.log(“带解析浮点d1:+d1+”,d2:+d2+”,d3/结果:+d3);
d1=parseInt($('input.inputOne').val());
d2=parseInt($('input.inputwo').val());
d3=((d1*d2)/10000.toFixed(2);
log(“带parseInt d1:+d1+”,d2:+d2+”,d3/结果:+d3);
});


最后我得到了它-在我完成所有数学运算的那一刻和我将结果放入DOM的那一刻之间,我正在对这些数字输入执行空()操作-当我停止它时,它就可以很好地完成数学运算(没有乘法错误等)-我觉得这很奇怪,因为我认为如果我做了归因,然后我会删除源输入,那么它不应该影响那些输入值的变量。

请提供实际细节
100*10
永远不会返回类似于
NaN
的任何内容,因此您忽略了一些细节。当您尝试对null、未定义或无穷大的成员执行数学运算时,通常会返回NaN(有时,未定义的成员会返回无穷大)。您所解析的应为
parseInt(变量,10)
其中10是基础。很好的建议@MBillau,但仍然不起作用:/谢谢-我已经尝试了您提供的两种解决方案,但仍然不起作用:/也许我会尝试在真正的android手机上模拟它,而不是模拟器,并将结果放在这里。