在不同的语言环境中使用 parseFloat()
Using parseFloat() in different locales
我有一个使用 .toLocaleString()
格式化的输入字段。
然后我需要对该值使用 parseFloat()
将其转换为数字。
要在美国语言环境中执行此操作,我只需在执行 parseFloat()
.
之前使用 value.replace(',','')
去掉小数点
然而,这在千位分隔符和小数点颠倒的欧洲语言环境中不起作用。
是否有一种方法可以确定您的用户所在的语言环境,然后是否先反转逗号和小数?
您可以使用 toLocaleString
首先查看示例数字如何转换为字符串,然后从输出中了解区域设置的分隔符,并使用该信息解析字符串:
function localeParseFloat(s, locale) {
// Get the thousands and decimal separator characters used in the locale.
let [,thousandsSeparator,,,,decimalSeparator] = 1111.1.toLocaleString(locale);
// Remove thousand separators, and put a point where the decimal separator occurs
s = Array.from(s, c => c === thousandsSeparator ? ""
: c === decimalSeparator ? "." : c).join("");
// Now it can be parsed
return parseFloat(s);
}
console.log(parseFloat(localeParseFloat("1.100,9"))); // user's locale
console.log(parseFloat(localeParseFloat("1.100,9", "us"))); // US locale
console.log(parseFloat(localeParseFloat("1.100,9", "nl"))); // Dutch locale: reversed meaning of separators
// And the same but with separators switched:
console.log(parseFloat(localeParseFloat("1,100.9"))); // user's locale
console.log(parseFloat(localeParseFloat("1,100.9", "us"))); // US locale
console.log(parseFloat(localeParseFloat("1,100.9", "nl"))); // Dutch locale: reversed meaning of separators
我有一个使用 .toLocaleString()
格式化的输入字段。
然后我需要对该值使用 parseFloat()
将其转换为数字。
要在美国语言环境中执行此操作,我只需在执行 parseFloat()
.
value.replace(',','')
去掉小数点
然而,这在千位分隔符和小数点颠倒的欧洲语言环境中不起作用。
是否有一种方法可以确定您的用户所在的语言环境,然后是否先反转逗号和小数?
您可以使用 toLocaleString
首先查看示例数字如何转换为字符串,然后从输出中了解区域设置的分隔符,并使用该信息解析字符串:
function localeParseFloat(s, locale) {
// Get the thousands and decimal separator characters used in the locale.
let [,thousandsSeparator,,,,decimalSeparator] = 1111.1.toLocaleString(locale);
// Remove thousand separators, and put a point where the decimal separator occurs
s = Array.from(s, c => c === thousandsSeparator ? ""
: c === decimalSeparator ? "." : c).join("");
// Now it can be parsed
return parseFloat(s);
}
console.log(parseFloat(localeParseFloat("1.100,9"))); // user's locale
console.log(parseFloat(localeParseFloat("1.100,9", "us"))); // US locale
console.log(parseFloat(localeParseFloat("1.100,9", "nl"))); // Dutch locale: reversed meaning of separators
// And the same but with separators switched:
console.log(parseFloat(localeParseFloat("1,100.9"))); // user's locale
console.log(parseFloat(localeParseFloat("1,100.9", "us"))); // US locale
console.log(parseFloat(localeParseFloat("1,100.9", "nl"))); // Dutch locale: reversed meaning of separators