[英]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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.