【问题标题】:Javascript giving NaN errorJavascript给出NaN错误
【发布时间】:2013-06-15 04:15:55
【问题描述】:

我正在使用以下代码:

<script type="text/javascript">
function minus(){
var t=document.getElementById("totalcost").value;
var u=document.getElementById("advpay").value;  
var set=(t-u);
document.getElementById("textfield").value=set;
return true;
}
</script>

我在 totalcost id 字段中输入了 “6000” 作为值,在 advpay id 字段中输入了 “1000” .所以在 textfield id 字段中,它应该显示 5000 (6000-1000),但它给出的答案是 NaN 。错误在哪里?

【问题讨论】:

    标签: javascript


    【解决方案1】:
    <script type="text/javascript">
    function minus() {
        var t = parseInt(document.getElementById("totalcost").value, 10),
            u = parseInt(document.getElementById("advpay").value, 10),
            set = (t - u);
        document.getElementById("textfield").value = set;
        return true;
    }
    </script>
    

    这是因为您试图减去两个字符串! value 返回输入的字符串,您需要将其解析为数字才能减去它们。请记住指定parseInt 的基数,否则该数字可能无法解析为小数。请参阅this answer 了解更多详细信息。

    【讨论】:

    • "记得指定parseInt的基数,否则会被解析为八进制。"我不这么认为......
    • 你是对的,它不会被解析为八进制,它基本上会在数字本身上解析。
    • "...否则数字将被解析为八进制 如果它以零开头。"
    • 你现在评论了,我15分钟前已经修改了答案……是更新错了吗?
    • 不,你的修正很好。我的评论只是为了澄清何时数字可以被解释为八进制。
    【解决方案2】:

    NaN 是 Not a Number 的缩写。 NaN 将是包含任何内容而不是数字(字符串、布尔值、对象)的任何计算的结果。在您的情况下,计算是使用 2 个字符串进行的,这就是它返回 NaN 的原因。在进行计算之前,您必须将值转换为数字。

    您可以使用以下代码转换您的值:

    示例 1:

     var t = +document.getElementById("totalcost").value;
     u = +document.getElementById("advpay").value;
    

    示例 2(如 @LightStyle 建议的那样):

     var t = parseInt(document.getElementById("totalcost").value, 10),
     u = parseInt(document.getElementById("advpay").value, 10),
    

    【讨论】:

      猜你喜欢
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多