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

【讨论】:

parseIntparseFloat 都会因为 , 而导致您丢失小数位。 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? [复制]

jQuery 从变量中取回 NaN 和 [object Object]

jQuery——随笔

计算二维数组每行中非 NaN 值的数量

为啥 nan 可以通过重复计算来防止?

如何计算 pandas DataFrame 中的 nan 值?