关于js中NaN的问题

小肥驴儿 2013-07-21 05:10:47
在以下代码中,运行时,totalQuantity、totalCost这两个变量总是在网页上显示NaN这个值,而不是我设想的让它计算出各行的总和。但是如果我把这两个语句“ totalQuantity+=quantity; totalCost+=cost;”改成“ totalQuantity=quantity; totalCost=cost;”时,它是会显示出循环的最后一行的值。所以是不是这两个语句“ totalQuantity+=quantity; totalCost+=cost;”有什么问题还是其它的原因呢
$('.Gquantity input').keypress(function(event){
if(event.which&&(event.which<48||event.which>57)){
event.preventDefault();
}
}).change(function(){
var totalQuantity = 0;<!--所有商品的数量-->
var totalCost = 0;<!--所有商品的金额-->
<!---通过用户对商品数量选择的变换来计算对应的金额->
$('#cart tbody tr').each(function() {
var price = parseFloat($('.Gprice',this).text().replace(/^[^\d.]*/,''));
price = isNaN(price)? 0:price;
var quantity = parseInt($('.Gquantity input',this).val(),10);
var cost = quantity * price;
$('.Gcost',this).text('¥'+cost.toFixed(2));
totalQuantity+=quantity;
totalCost+=cost;
//<!--对应商品总额的计算-->
});
alert(totalCost);
$('#subtotalcost').text('¥'+totalCost.toFixed(2));<!--原价总额-->
$('#totalquantity').text(totalQuantity);<!--总数量-->


<!--优惠金额的计算-->
// var count = parseFloat($('.count.Gcost').text().replace(/^[^\d.]*/,''));
// totalCost += count;

<!--运费的计算-->
$('#shippingquantity').text(String(totalQuantity));
var shippingRate = parseFloat($('#shippingprice').text().replace(/^[^\d.]*/,''));
var shipping = totalQuantity * shippingRate;
$('#shippingcost').text('¥'+shipping.toFixed(2));
totalCost += shipping;

<!--实际所需付款金额-->
$('#tatal').text('¥'+totalCost.toFixed(2));

});
...全文
579 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Acesidonu 2013-07-23
  • 打赏
  • 举报
回复
引用 8 楼 ShenShiampMoYi 的回复:
NAN应该是在数据计算的过程中出现不可知(不可识别)的数据 建议查查计算数据的代码 看看计算过程有没问题
++
  • 打赏
  • 举报
回复
NAN应该是在数据计算的过程中出现不可知(不可识别)的数据 建议查查计算数据的代码 看看计算过程有没问题
ILOVE_ASPNET 2013-07-23
  • 打赏
  • 举报
回复
再补充一点,比如 $('#tatal').text() 这种方式很容易得到的数据有空格, 最好是去除下空格,$.trim($('#tatal').text())确保计算之前的数据格式都正确, 可以减少一些错误。
ILOVE_ASPNET 2013-07-23
  • 打赏
  • 举报
回复
一般出现这种情况都是在 计算整型或者带浮点的时候 计算出了问题, 最好是先用正则验证输入的内容,然后 计算的时候用 parseInt("123") 或者parseFlost("123") 根据你实际的类型来进行转换。
  • 打赏
  • 举报
回复
引用 4 楼 Cissharp 的回复:
引用 3 楼 veryhunger 的回复:
[quote=引用 2 楼 Cissharp 的回复:] 可是$('.Gcost',this).text('¥'+cost.toFixed(2));这句话执行出效果了啊
var price = parseFloat($('.Gprice',this).text().replace(/^[^\d]*/,''));
这句话有什么问题吗? [/quote]\d后去了.试试
小肥驴儿 2013-07-22
  • 打赏
  • 举报
回复
引用 3 楼 veryhunger 的回复:
引用 2 楼 Cissharp 的回复:
可是$('.Gcost',this).text('¥'+cost.toFixed(2));这句话执行出效果了啊
var price = parseFloat($('.Gprice',this).text().replace(/^[^\d]*/,''));
这句话有什么问题吗?
  • 打赏
  • 举报
回复
引用 2 楼 Cissharp 的回复:
可是$('.Gcost',this).text('¥'+cost.toFixed(2));这句话执行出效果了啊
var price = parseFloat($('.Gprice',this).text().replace(/^[^\d]*/,''));
小肥驴儿 2013-07-21
  • 打赏
  • 举报
回复
可是$('.Gcost',this).text('¥'+cost.toFixed(2));这句话执行出效果了啊
街头小贩 2013-07-21
  • 打赏
  • 举报
回复
看不懂代码是吧?出现NaN的原因是 $('.Gprice',this).text() $('.Gquantity input',this).val() 可能是取不到值或者.Gprice,.Gquantity元素不存在

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧