Javascript函数Number.parseLocale在有负数时返回NaN

时间:2014-01-30 09:21:01

标签: javascript jquery

我有以下JS方法,如果数字为正数,则变量percentageValue返回正确,但如果数字为负,则返回NaN。我不知道如何解决它。

    function Test() {
    debugger;
    var catLength= $("[id$=lblCat]").length;
    for (var i = 0; i < catLength- 1; i++) {
        var categoryValue = Number.parseLocale($("[id$=" + i + "_lblCat]")[0].title);
        var percentageValue = Number.parseLocale(($("[id$=" + i + "_txtPercentage]")[0].value).replace("%", ""));

    }
}

4 个答案:

答案 0 :(得分:1)

您可以使用标准parseInt

var a = parseInt("-2");
var b = parseInt("2");

http://jsfiddle.net/AV4rB/

标准号码对象没有parseLocale方法:

Object.getOwnPropertyNames(Number)
["length", "name", "arguments", "caller", "prototype", "MAX_VALUE", "MIN_VALUE", "NaN", "NEGATIVE_INFINITY", "POSITIVE_INFINITY", "isFinite", "isNaN"]

答案 1 :(得分:1)

这是你想要做的事情

var num  = $("[id$=" + i + "_txtPercentage]")[0].value).replace("%", "");
//lets say num is 3500
num.toLocaleString();//returns for me 3 500

文档:Number.prototype.toLocaleString()

答案 2 :(得分:1)

正如您将收集的那样,JavaScript的Number 具有parseLocale功能。你需要回到你正在使用的任何库中添加它。

如果你需要创建自己的,你可以这样做:

(function() {
    var thousandsep, decimalsep, rexFindThousands, rexFindDecimal;

    thousandsep = (1200).toLocaleString().replace(/\d/g, '').substring(0, 1);
    decimalsep = (1.2).toLocaleString().repalce(/\d/g, '').substring(0, 1);
    if (!thousandsep) {
        // Big assumption here
        thousandsep = decimalsep === "." ? "," : ".";
    }
    rexFindThousands = new RegExp("\\" + thousandsep, "g");
    rexFindDecimals = new RegExp("\\" + decimalsep, "g");

    Number.prototype.parseLocaleString = function(str) {
        str = String(str).replace(rexFindThousands, '').replace(rexFindDecimals, '.');
        return parseFloat(str);
    };
})();

尝试检测特定于语言环境的千位和小数分隔符,然后向Number添加一个函数,该函数完全删除千位分隔符并用{{1}替换小数点分隔符(.使用的那个),然后使用parseFloat返回解析结果。

但我要强调parseFloat的输出是依赖于实现的。小数可能有效,但我不知道toLocaleString返回包含千位分隔符的字符串是多么可靠,因此上面的回退假设。

另请注意,如果您要解析的字符串中包含toLocaleString,则您需要在解析之前将其删除。 %会在到达时停止(将数字返回到该点),但仍然更清洁。

请参阅:

答案 3 :(得分:0)

试试这个

function Test() {
debugger;
    var catLength= $("[id$=lblCat]").length;
    for (var i = 0; i < catLength- 1; i++) {
        var categoryValue = parseFloat($("[id$=" + i + "_lblCat]")[0].title, 2);
        var percentageValue = parseFloat(($("[id$=" + i + "_txtPercentage]")[0].value, 2).replace("%", ""));

    }
}