Следующая функция сначала создаст NumberFormat на основе заданной локали.Затем он попытается найти десятичный разделитель для этого языка.
Наконец, он заменит все, кроме десятичного разделителя в данной строке, затем заменит зависимый от локали разделитель точкой по умолчанию и преобразует его в число..
function convertNumber(num, locale) {
const { format } = new Intl.NumberFormat(locale);
const [, decimalSign] = /^0(.)1$/.exec(format(0.1));
return +num
.replace(new RegExp(`[^${decimalSign}\\d]`, 'g'), '')
.replace(decimalSign, '.');
}
// convertNumber('100,45', 'de-DE')
// -> 100.45
Имейте в виду, что это всего лишь быстрое подтверждение концепции и может / не получится с более экзотическими локалями, которые не следуют сделанным здесь предположениям (например, слева направо, нет странного числавставки, без пробелов, без знаков и т. д.).
Однако вы можете адаптировать это ...