Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.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计算问题-NaN消息_Javascript_Nan - Fatal编程技术网

JavaScript计算问题-NaN消息

JavaScript计算问题-NaN消息,javascript,nan,Javascript,Nan,我在计算总数。我从div得到的和值。但总的来说,我得到的不是数字,而是NaN——不是数字 JavaScript函数: <script type="text/javascript"> function calculateTotal(){ var total = document.getElementById('valor1').innerHTML*1 + document.getElementById('valor2').inne

我在计算总数。我从div得到的和值。但总的来说,我得到的不是数字,而是NaN——不是数字

JavaScript函数:

<script type="text/javascript">
            function calculateTotal(){
                var total = document.getElementById('valor1').innerHTML*1 + document.getElementById('valor2').innerHTML*1 + document.getElementById('valor3').innerHTML*1 + document.getElementById('valor4').innerHTML*1 + document.getElementById('valor5').innerHTML*1 + document.getElementById('valor6').innerHTML*1;
                document.getElementById('total').innerHTML = total;
            }
</script>
编辑:

我发现了错误,在DIV中有一个结束标记,如下所示:

<center><div id="valor1"></center></div>
改为:

<center><div id="valor1"></div></center>
在执行操作之前,请使用parseFloatdocument.getElementById'x'.innerHTML将它们转换为数字:

var total = parseFloat(document.getElementById('x1').innerHTML) + parseFloat(document.getElementById('x2').innerHTML); 
您可能还想检查它们是否为数字,下面是一个使用isNaN的简单测试:


你试着把这些零件放进括号里了吗

(document.getElementById('valor1').innerHTML * 1) + ...
见:

更好的方法是使用parseIntvar字符串函数

parseInt(document.getElementById('valor1').innerHTML) + ...

尝试在中使用parseInt

var total = parseInt(document.getElementById('valor1').innerHTML)*1 + parseInt(document.getElementById('valor2').innerHTML)*1 + ... ;
等等


这将确保您从字段中得到的实际上是一个数字,您不能直接使用document.getElementById'valor1'.innerHTML。你必须把它转换成数字。请试试这个

var value = document.getElementById('valor1').innerHTML;
var number = parseFloat(value)||0;
对每个有编号的div innerHTML执行此操作

var number = parseFloat(value)||0;
如果div为空或div html无法转换为数字,则上行将帮助您将0分配给值。

html:

<div id="valor1">2</div>
<div id="valor2">2</div>
<div id="valor3">ccccc</div>
<div id="valor4">2</div>
<div id="valor5">2</div>
<div id="valor6">2</div>
<hr/>
<div id="total">0</div>
对工作和性能进行了一些优化

但为什么要停在这里我们可以做得更好我认为:

function get(elem) {
    return (parseFloat($(elem).innerHTML) || (function() {
        $(elem).innerHTML += " <i>Not a number assumed 0</i>";
        return 0;
    }()));
}
和更新的


编辑:在Chrome和Mozilla Linux上没有错误。

更好。。。使用parseFloat-我真傻,假设你使用的是整数-1。innerHTML是一个字符串,不管优先级如何,他仍然会得到NaN。但不会记录。getElementById'valor1'。innerHTML*1会产生一个整数??我尝试过了,但仍然使用NaN而不是numberMaybe一些innerHTML是空的?所以emtyString*1==NaNSometimes blank并不意味着0——它是null或未赋值的+1是一个漂亮的选择@拉斐尔-嗯。。。如果parseFloat不起作用,我认为元素的innerHTML实际上不是一个数字。。。检查他们…@Rafael-你试过@MAK的答案吗?试试看,我想它会有用的。是的,我的一些div是空的。谢谢你的回答,很好的一个:它对Mozilla有效,但在IE8中不是:S,而不是Total,它只显示0@RafaelSantos Im在Linux上,没有这个:测试它
function $(id) { return document.getElementById(id); }
function get(elem) { return parseFloat($(elem).innerHTML) || 0; }

(function() {
    var total =
        get('valor1') * 1 + get('valor2') * 1 + get('valor3') * 1 + 
        get('valor4') * 1 + get('valor5') * 1 + get('valor6') * 1;
    $('total').innerHTML = total;
}());
function get(elem) {
    return (parseFloat($(elem).innerHTML) || (function() {
        $(elem).innerHTML += " <i>Not a number assumed 0</i>";
        return 0;
    }()));
}