Как я могу преобразовать строку в число в соответствии с языковым стандартом JavaScript - PullRequest
0 голосов
/ 19 октября 2018

Если я сделаю:

var number = 35000.25; alert(number.toLocaleString("de-DE")); Я получу 35.000,25 на немецком языке.

Но как мне преобразовать его обратно в 35000.25 или я хочу что-то вроде:

var str='35.000,25'; alert(str.toLocaleNumber("en-US")); Итак, что может дать 35,000.25.

Возможно ли это с помощью JS?

1 Ответ

0 голосов
/ 19 октября 2018

Следующая функция сначала создаст 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

Имейте в виду, что это всего лишь быстрое подтверждение концепции и может / не получится с более экзотическими локалями, которые не следуют сделанным здесь предположениям (например, слева направо, нет странного числавставки, без пробелов, без знаков и т. д.).

Однако вы можете адаптировать это ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...