Я пытаюсь найти способ преобразовать строку, которая была выведена Number.toLocaleString (), в число с плавающей запятой с разделителями тысяч и десятичных разрядов.Проблема в том, что я не могу найти способ сделать это для любой локали: китайские числа имеют разделитель каждые 4 цифры, Индия начинается с 3, а затем каждые 2 цифры, немецкие разделители в точности противоположны английским, у французов есть пробелы длятысячи и т.д ...
Это в основном то, что я хочу:
Indian : '10,00,00,123' => '100000.123'
French : '123 456,789' => '123456.789'
Есть ли библиотека, которая может сделать это?У меня есть локаль перед анализом с
navigator.language
, если это помогает
Заранее спасибо
ОБНОВЛЕНИЕ: Этоэто то, что я придумал, и он отлично работает для арабских цифр:
let localeString = '123,45,67,89.57982';
console.log(reformat(localeString));
function reformat(str) {
let rawNumber;
let decimalIndex;
let charToRemove = 0;
for (let i = 0; i < str.length; i++) {
if (!isNaN(str[i])) {
//concatenating numbers
rawNumber = parseInt(`${rawNumber ? rawNumber : ''}${str[i]}`);
} else {
decimalIndex = i;
charToRemove++;
}
}
return format(rawNumber, decimalIndex, charToRemove);
}
function format(number, decimalIndex, charToRemove) {
if (decimalIndex) {
// Adding decimal to the right place
return number / Math.pow(10, number.toString().length - decimalIndex + charToRemove - 1);
} else {
return number;
}
}
РЕДАКТИРОВАТЬ: он не работает так, как задумано, поскольку нет способа узнать, является ли разделитель десятичным или тысячным (нетспособ дифференциации целых чисел с помощью тысяч разделителей и десятичного числа)