Javascript 乘法后,js返回number和NaN
我正在使用PhoneGap构建一个android应用程序。我多次从数字输入中获取值,一切正常,但在某一时刻,它的行为异常: 我从数字输入中获取值,并将其解析为整数——一切正常。但当我乘以这些值时,它会给我一个值+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
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手机上模拟它,而不是模拟器,并将结果放在这里。