有没有人建议在JavaScript中编写文化敏感的ParseFloat函数,这样当我有一个美国文化格式的字符串100,000.22时,解析浮点函数返回100000.22而如果我在瑞典文化中输入100.000,22则返回100000.22浮点数?
答案 0 :(得分:6)
我已经改进了wilcox'函数来处理没有分隔符的值。
function parseFloatOpts (str) {
if(typeof str === "number"){
return str;
}
var ar = str.split(/\.|,/);
var value = '';
for (var i in ar) {
if (i>0 && i==ar.length-1) {
value += ".";
}
value +=ar[i];
}
return Number(value);
}
答案 1 :(得分:3)
这有点粗糙,但它可能就足够了,允许你传入千位和小数分隔符:
function parseFloatOpts(num, decimal, thousands) {
var bits = num.split(decimal, 2),
ones = bits[0].replace(new RegExp('\\' + thousands, 'g'), '');
ones = parseFloat(ones, 10),
decimal = parseFloat('0.' + bits[1], 10);
return ones + decimal;
}
示例:
parseFloatOpts("100.000,22", ',', '.'); //100000.22
parseFloatOpts("100,000.22", '.', ','); //100000.22
请注意,这并不能确保数千个分隔符确实代表数千个等等,或者根据函数的重要性,执行许多其他您可能希望执行的操作。
答案 2 :(得分:1)
var parse = function(st){
if(st.indexOf(",") === st.length-3){
st = st.replace(".", "").replace(",", ".");
}else{
st = st.replace(",", "");
}
return parseFloat(st, 10)
}
console.log(parse("100,000.22")) // 100000.22
console.log(parse("100.000,22")) // 100000.22
我只是检查倒数第三个位置是否有逗号。这可以进一步细化,以检查在没有逗号的情况下是否存在第4个到最后位置的句点(例如100.000)
答案 3 :(得分:1)
看着lonesomday给了我这个想法:
你也可以这样做:
function parse (str)
var ar = str.split(/\.|,/);
return Number(ar[0]+ar[1]+"."+ar[3]);
答案 4 :(得分:0)
这是一个粗略的功能。它将假设最后一个标点符号表示小数,无论是逗号,句号还是您可能需要指示的任何其他字符。然后它从整数中消除了其他标点符号。把它放回去并解析为浮动。
function normalizeFloat(number, chars) {
var lastIndex = -1;
for(i=0; i < chars.length; i++) {
t = number.lastIndexOf(chars[i]);
if (t > lastIndex) {
lastIndex = t;
}
}
if (lastIndex == -1) {
lastIndex = number.length;
}
var whole = number.substring(0, lastIndex);
var precision = number.substring(lastIndex);
for (i=0; i < chars.length; i++) {
whole = whole.replace(chars[i], '');
precision = precision.replace(chars[i],'.');
}
number = whole + precision;
f = parseFloat(number);
return f;
}
试试这个:
alert(normalizeFloat('12.345,77', [',','.']).toFixed(2));
alert(normalizeFloat('12,345.77', [',','.']).toFixed(2));
答案 5 :(得分:0)
需要从“文化信息”中选择当前的组和小数分隔符。
function escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
function parseFloatOpts(str, groupSeparator, decimalSeparator) {
if (typeof str === "number") {
return str;
}
var value = str.replace(new RegExp(escapeRegExp(groupSeparator), 'g'), "");
value = value.replace(decimalSeparator, ".");
return Number(value);
}
答案 6 :(得分:0)
如果您真的要在JavaScript的不同区域中显示和/或解析浮点数(或日期,货币或更多),那么我的建议是GlobalizeJS(https://github.com/globalizejs/globalize)库。
一开始设置起来有点困难(至少以我的经验),但是强烈建议对此事进行适当的管理。