Javascript jQuery计算

Javascript jQuery计算,javascript,jquery,nan,Javascript,Jquery,Nan,我有一个视图,可以输出表示数据库中货币数据类型的十进制值。要输出,我使用以下格式代码 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) {

我有一个视图,可以输出表示数据库中货币数据类型的十进制值。要输出,我使用以下格式代码

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
读取为一个数字?

NaN=不是一个数字

通过使用
parseInt
可以告诉Javascript它应该被视为一个数字

var pPrice = parseInt($(pObj).attr(attrProductPrice));

如果您使用的是十进制,则可能需要使用
parseFloat

如果这是唯一的逗号分隔符(千位分隔符没有),则只需替换它即可

var num = parseInt( str.replace( ',', '.' ) ); // or parseFloat
如果有其他字符会阻止正确的解析,那么我建议使用一个自定义属性来存储未修饰的数字

<input data-undecorated="123.45" value="123,45" />
如果您使用的是
jQuery 1.4.3
或更高版本,您可以像这样使用
data()
来获取
数据-
属性。

试试这个正则表达式:

更新:更改了表达式,因为我遗漏了该部分(以逗号作为小数分隔符)


代码有两个问题。首先,正如Webnet所建议的,您应该将字符串强制转换为float。但是,parseFloat函数希望参数使用点作为十进制分隔符。因此,以下代码将执行您想要的操作:

var pPrice = $(pObj).attr(attrProductPrice);
pPrice = parseFloat(pPrice.replace(',', '.'));
首先,将逗号替换为点,然后将结果转换为浮点。

试试这个

var pPrice = $(pObj).attr(attrProductPrice).split(",").join(".");
这看起来很相关:

看起来你必须用小数点替换逗号


parseFloat('12,99'。替换(',',')

我认为它应该是parseFloat而不是parseInt@Rafael:很可能。我在代码注释中已经注意到了这一点。这不是答案的要点,但值得注意。
parseInt
parseFloat
都会因为
而导致小数点丢失。您需要首先管理逗号。您应该始终将基数参数与parseInt一起使用。parseInt('0012')->10,parseInt('0012',10)->12。
var pPrice = $(pObj).attr(attrProductPrice);
pPrice = parseFloat(pPrice.replace(',', '.'));
var pPrice = $(pObj).attr(attrProductPrice).split(",").join(".");