ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Конвертация валютной строки в double с Javascript

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для того чтобы удалить валютные символы и прочие нерелевантные знаки, можно воспользоваться сочетанием parseFloat и регулярных выражений:

JS
Скопировать код
let number = parseFloat("$1,234.56".replace(/[^\d.-]/g, ''));
console.log(number);  // в результате получится 1234.56

Функция .replace(/[^\d.-]/g, '') очищает строку, оставляя только цифры и точку. Затем parseFloat преобразует полученное значение в число.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Работа со знаками различных валют

Если вы сталкиваетесь с разными валютами, например евро или фунты стерлингов, придется адаптировать регулярное выражение с учетом различных символов и форматов.

JS
Скопировать код
let number = parseFloat("€1.234,56".replace(/[^\d,.-]/g, '').replace(',', '.'));
console.log(number);  // тогда мы получим 1234.56

На этом примере демонстрируется обработка запятой в качестве десятичного разделителя, стандартной для многих стран.

Применение библиотек для учета локализации

Чтобы учесть особенности различных локалей, можно применить jQuery Globalize:

JS
Скопировать код
Globalize.culture('fr-FR'); // задаем французскую локаль
let number = Globalize.parseFloat("1 234,56 €");
console.log(number); // вывод 1234.56

Благодаря Globalize преобразование строк с учетом локализации будет простым и быстрым.

Работа со значимостью чисел с плавающей точкой

В работе с денежными значениями критичен уровень точности вычислений. Однако в JavaScript возможны особенности, связанные с этой точностью:

JS
Скопировать код
let number = parseFloat("1000000000000000000.99".replace(/[^\d.-]/g, ''));
console.log(number);  // в результате получаем 1000000000000000000, а не 1000000000000000000.99 — почему так?

В таких случаях рекомендуется использовать библиотеки Big.js или Decimal.js для повышения точности вычислений.

Визуализация

Попробуем визуально продемонстрировать процесс преобразования строки в число с плавающей точкой.

Исходная строка: "$123,456.78"

Возьмите ее, представив эмодзи-пылесос (🌀) который пройдется по ней, удалит знак '$' и запятые, оставив только цифры и точку.

В итоге у вас на руках останется аккуратная горка монет (🪙), в которой отобразится наше число:

Получившееся число: 123456.78 🪙

Вот так просто и ясно.

Расширенный парсинг с помощью библиотек

При работе с разными форматами денежных значений стоит обратить внимание на такую библиотеку как accounting.js. Она позволяет гибко преобразовывать строки:

JS
Скопировать код
let number = accounting.unformat("$1,234,567.89");
console.log(number); // в итоге получаем 1234567.89

Работа с особыми форматами денежных значений

Регулярное выражение можно настроить для обработки как ведущих и замыкающих символов валюты, так и отрицательных значений:

JS
Скопировать код
let euNumber = parseFloat("-€123.456,78".replace(/[^\d,.-]/g, '').replace(',', '.'));
let usNumber = parseFloat("($123,456.78)".replace(/[^\d.-]/g, ''));
console.log(euNumber); // итак, получаем -123456.78
console.log(usNumber); // и здесь также -123456.78

Здесь мы используем скобки для обозначения отрицательных чисел и удаляем знаки, часто встречающиеся в формах бухгалтерского учета.

Полезные материалы

  1. parseFloat() – JavaScript | MDN — Официальная документация по функции parseFloat().
  2. Strip all non-numeric characters from string in JavaScript – Stack Overflow — Различные способы очистки строк от лишних символов.
  3. JavaScript RegExp Object – Using Regular Expressions with Client Side Scripting — Инструкция по применению регулярных выражений в JavaScript.
  4. Intl.NumberFormat – JavaScript | MDN — Форматирование числовых значений с учетом локализации.
  5. Working with large integers in JavaScript — Как работать с большими числами, обеспечивая высокую точность.
  6. Numbers — Основные принципы числовых преобразований в JavaScript.