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(".");