2

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

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一切正常。

有没有办法12,99使用 javascript/jQuery 将数字读取为数字?

4

6 回答 6

3

NaN = 不是数字

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

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

parseFloat如果您使用小数,您可能需要。

于 2010-12-27T21:39:17.650 回答
3

代码有两个问题。首先,您应该按照 Webnet 的建议将字符串转换为浮动。然而, parseFloat 函数将期望参数使用点作为小数分隔符。因此,以下代码将执行您想要的操作:

var pPrice = $(pObj).attr(attrProductPrice);
pPrice = parseFloat(pPrice.replace(',', '.'));

首先,将逗号替换为点,然后将结果转换为浮点数。

于 2010-12-27T21:44:19.473 回答
1

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

var num = parseInt( str.replace( ',', '.' ) ); // or parseFloat

如果还有其他字符会阻止正确解析,那么我建议使用一个自定义属性来存储未修饰的数字。

<input data-undecorated="123.45" value="123,45" />
var num = parseInt( $('#myInput').data('undecorated') ); // or parseFloat

如果您正在使用或以后使用,您可以data()像这样使用来获取data-属性。jQuery 1.4.3

于 2010-12-27T21:42:04.093 回答
1

试试这个正则表达式:

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

var pPrice = $(pObj).attr(attrProductPrice)..replace(/(,)(\d+)$/, ".$2").replace(",","")
于 2010-12-27T21:43:48.807 回答
1

试试这个

var pPrice = $(pObj).attr(attrProductPrice).split(",").join(".");
于 2010-12-27T21:45:16.267 回答
0

这看起来相关:How to convert string into float in javascript?

看起来您必须用小数替换逗号。

parseFloat('12,99'.replace(',', '.'))

于 2010-12-27T21:46:02.237 回答