我有一个视图,输出十进制值表示数据库中的货币数据类型。要输出我正在使用以下格式代码
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
作为数字?
答案 0 :(得分:3)
NaN =不是数字
通过使用parseInt
,您可以告诉Javascript它应该被视为一个数字。
var pPrice = parseInt($(pObj).attr(attrProductPrice));
如果您使用小数,则可能需要parseFloat
。
答案 1 :(得分:3)
代码有两个问题。首先,你应该将字符串转换为浮动,正如Webnet建议的那样。但是,parseFloat函数会期望参数使用点作为小数分隔符。因此,以下代码将执行您想要的操作:
var pPrice = $(pObj).attr(attrProductPrice);
pPrice = parseFloat(pPrice.replace(',', '.'));
首先,替换点的逗号,然后将结果转换为浮点数。
答案 2 :(得分: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
属性。
答案 3 :(得分:1)
试试这个RegEx:
更新:更改了表达式,因为我错过了部分(用逗号作为小数分隔符)。
var pPrice = $(pObj).attr(attrProductPrice)..replace(/(,)(\d+)$/, ".$2").replace(",","")
答案 4 :(得分:1)
试试这个
var pPrice = $(pObj).attr(attrProductPrice).split(",").join(".");
答案 5 :(得分:0)
这看起来很相似:How to convert string into float in javascript?
看起来你必须用小数替换逗号。
parseFloat('12,99'.replace(',','。'))