JavaScript计算问题 - NaN消息

时间:2011-07-14 09:20:15

标签: javascript nan

我正在计算一个总数。我从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>

5 个答案:

答案 0 :(得分:9)

您不能直接使用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分配值。

答案 1 :(得分:4)

在执行操作之前,使用parseFloat(document.getElementById('x').innerHTML)将其转换为数字:

var total = parseFloat(document.getElementById('x1').innerHTML) + parseFloat(document.getElementById('x2').innerHTML); 

如果它们是数字,您也可以查看它们,这是使用isNaN的简单测试:

alert((isNaN("23"))?'not number':'number');

答案 2 :(得分:3)

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>

JavaScript的:

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;
}());

对工作进行一点优化,并demo

但为何停在这里? :)我们可以让它变得更好(我认为):

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

更新后的demo

修改:Chrome和&amp ;; Mozilla(Linux)。

答案 3 :(得分:1)

尝试使用parseInt(),如

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

等等

这将确保您从字段中获取的内容实际上是一个数字

答案 4 :(得分:0)

您是否尝试将这些部分放入括号中?

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

请参阅:http://rx4ajax-jscore.com/ecmacore/operator/predence.html

更好 - 使用parseInt(var string)函数;

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