JavaScript 计算问题 - NaN 消息

发布于 2024-11-19 18:19:57 字数 857 浏览 4 评论 0原文

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

I'm calculating a total number. I get the sum values from div's. But in total, instead of numbers I get (NaN - Not a Number)

JavaScript Function:

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

EDIT:

I found the error, I had a closing tag inside the DIV's like this:

<center><div id="valor1"></center></div>

Changed to:

<center><div id="valor1"></div></center>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

留一抹残留的笑 2024-11-26 18:19:58

您不能直接使用 document.getElementById('valor1').innerHTML 。您必须将其转换为数字。请尝试这个。

var value = document.getElementById('valor1').innerHTML;
var number = parseFloat(value)||0;

对每个有编号的 div insideHTML 执行此操作。

var number = parseFloat(value)||0;

如果 div 为空或 div html 无法转换为数字,上面的行将帮助您将 0 分配给值。

You cannot use document.getElementById('valor1').innerHTML directly. You have to convert this to number. Please try this.

var value = document.getElementById('valor1').innerHTML;
var number = parseFloat(value)||0;

Do this for each div innerHTML which have number.

var number = parseFloat(value)||0;

The above line will help you to assign 0 to value if div is empty or div html cannot be converted to a number.

终止放荡 2024-11-26 18:19:58

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

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

您可能还想检查它们是否是数字,这里有一个使用 isNaN

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

Use parseFloat(document.getElementById('x').innerHTML) to convert them to numbers before performing operations:

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

You also may want to check them if they're numeric, here's a simple test using isNaN:

alert((isNaN("23"))?'not number':'number');
泪痕残 2024-11-26 18:19:58

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

对工作和演示进行一些优化。

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

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

以及更新的演示

编辑:Chrome 上没有错误Mozilla(Linux)。

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

A little optimization of the work and demo.

But why stop here? :) we can make it even better ( I think ):

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

And the updated demo.

Edit: no errors on Chrome & Mozilla (Linux).

一抹微笑 2024-11-26 18:19:58

尝试使用 parseInt() 等

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

这将确保您从字段中得到的实际上是一个数字

try using parseInt() as in

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

etc etc

this will ensure that what you're getting out of the fields is in fact, a number

风向决定发型 2024-11-26 18:19:58

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

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

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

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

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

Did you try to put these parts into brackets?

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

See: http://rx4ajax-jscore.com/ecmacore/operator/predence.html

Even better - use the parseInt(var string) function;

parseInt(document.getElementById('valor1').innerHTML) + ...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文