我有以下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("%", ""));
}
}
答案 0 :(得分:1)
您可以使用标准parseInt
:
var a = parseInt("-2");
var b = parseInt("2");
标准号码对象没有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
答案 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("%", ""));
}
}