【问题标题】:After multiplication js returns number and NaN乘法后js返回数字和NaN
【发布时间】:2013-10-21 14:49:22
【问题描述】:

我正在使用 PhoneGap 构建一个 Android 应用程序。我多次从数字输入中获取值,一切正常,但有一次它的行为很奇怪:

我从数字输入中获取值并将其解析为整数 - 一切正常。但是当我将这些值相乘时,它会返回一个值 + NaN NaN 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

【问题讨论】:

  • 请提供实际细节。 100 * 10 永远不会返回像 NaN 这样的任何东西,所以你遗漏了一些细节。
  • NaN 通常在您尝试使用 null、未定义或 Infinity 的成员进行数学运算时返回(并且有时可以使用未定义的成员返回 Infinity)。
  • 你的 parseInt 应该是 parseInt(variable, 10) 其中 10 是基数。
  • 好建议@MBillau,但它仍然不起作用:/

标签: javascript android input cordova


【解决方案1】:

我确切地知道这里有什么问题。 您在从输入元素获取值之前忘记了验证。 我为你创建了一个演示小提琴。你可以看看它。 如果您将输入元素中的值更改为非数字(如“abc”);当您尝试将其解析为 float 时:它会给您 NaN 的错误。因为它是“不是数字”。我希望这有帮助。 http://jsfiddle.net/rahulkhadse/CNB2t/28/

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

http://www.texotela.co.uk/code/jquery/numeric/

或者你可以利用"onkeyup"事件查看用户在输入框中输入的值类型。

P.S: jsFiddle 上的代码:-

$(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>

【讨论】:

  • 谢谢 - 我已经尝试了您提供的两种解决方案,但仍然无法正常工作:/也许我会尝试在真正的 android 手机而不是模拟器上模拟它并将结果放在这里.
【解决方案2】:

终于我明白了——在我完成所有数学运算和将结果放入 DOM 之间的时间里,我在这些数字输入上执行了 empty()——当我停止它时它的数学运算很好(没有乘法错误等)-我认为这很奇怪,因为我认为如果我进行归因并且在我删除源输入之后,它不应该影响具有输入值的那些变量。

【讨论】:

    猜你喜欢
    • 2015-03-09
    • 2017-09-19
    • 2021-08-06
    • 2016-07-05
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    • 2019-02-20
    相关资源
    最近更新 更多