jQuery计算NaN
Posted
技术标签:
【中文标题】jQuery计算NaN【英文标题】:jQuery calculation NaN 【发布时间】:2011-05-31 07:57:49 【问题描述】:我有一个视图,它输出表示数据库中货币数据类型的十进制值。要输出,我使用以下格式代码
string price = String.Format("0:f", (item.Price + item.VAT));
产生这样的字符串
12,99 (with comma as the decimal separator)
我现在使用这个字符串在客户端使用 jQuery 进行一些计算
elmProductSelected.children("option").each(function(n)
var pIdx = $(this).attr("rel");
var pObj = products.eq(pIdx);
var pValue = $(this).attr("value");
var valueArray = pValue.split('|');
var prdId = valueArray[0];
var pQty = valueArray[1];
/* the value of pPrice is 12,99 after the following call */
var pPrice = $(pObj).attr(attrProductPrice);
/* I get NaN here! */
sTotal = sTotal + ((pPrice - 0) * (pQty - 0));
cProductCount++;
cItemCount = cItemCount + (pQty-0);
);
我得到 NaN 就在我评论的那一行。我想这是因为pPrice
值使用逗号作为小数点分隔符,因为如果我手动将其设置为12.99
一切正常。
有没有办法使用 javascript/jQuery 将 12,99
读取为数字?
【问题讨论】:
【参考方案1】:NaN = 不是数字
通过使用parseInt
,您可以告诉 Javascript 它应该被视为一个数字。
var pPrice = parseInt($(pObj).attr(attrProductPrice));
如果您使用小数,您可能需要parseFloat
。
【讨论】:
parseInt
和 parseFloat
都会因为 ,
而导致您丢失小数位。 Example.您需要先管理逗号。
您应该始终将 radix 参数与 parseInt 一起使用。 parseInt('0012') -> 10, parseInt('0012', 10) -> 12.【参考方案2】:
代码有两个问题。首先,您应该按照 Webnet 的建议将字符串转换为浮动。然而, parseFloat 函数将期望参数使用点作为小数分隔符。因此,下面的代码会做你想做的事:
var pPrice = $(pObj).attr(attrProductPrice);
pPrice = parseFloat(pPrice.replace(',', '.'));
首先,将逗号替换为点,然后将结果转换为浮点数。
【讨论】:
【参考方案3】:如果这是唯一的逗号分隔符(千位分隔符没有),那么只需替换它。
var num = parseInt( str.replace( ',', '.' ) ); // or parseFloat
如果还有其他字符会阻止正确解析,那么我建议使用一个自定义属性来存储未修饰的数字。
<input data-undecorated="123.45" value="123,45" />
var num = parseInt( $('#myInput').data('undecorated') ); // or parseFloat
如果您使用的是jQuery 1.4.3
或更高版本,您可以像这样使用data()
来获取data-
属性。
【讨论】:
我认为应该是 parseFloat 而不是 parseInt @Rafael:很有可能。我在代码注释中注明。这不是答案的重点,但值得注意。【参考方案4】:试试这个
var pPrice = $(pObj).attr(attrProductPrice).split(",").join(".");
【讨论】:
【参考方案5】:试试这个正则表达式:
更新:更改了表达式,因为我错过了部分(逗号作为小数分隔符)。
var pPrice = $(pObj).attr(attrProductPrice)..replace(/(,)(\d+)$/, ".$2").replace(",","")
【讨论】:
【参考方案6】:这看起来相关:How to convert string into float in javascript?
看来您必须用小数替换逗号。
parseFloat('12,99'.replace(',', '.'))
【讨论】:
以上是关于jQuery计算NaN的主要内容,如果未能解决你的问题,请参考以下文章
jQuery 脚本在文本框中显示 NaN,如何删除 NaN? [复制]