Конвертация валютной строки в double с Javascript
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для того чтобы удалить валютные символы и прочие нерелевантные знаки, можно воспользоваться сочетанием parseFloat
и регулярных выражений:
let number = parseFloat("$1,234.56".replace(/[^\d.-]/g, ''));
console.log(number); // в результате получится 1234.56
Функция .replace(/[^\d.-]/g, '')
очищает строку, оставляя только цифры и точку. Затем parseFloat
преобразует полученное значение в число.
Работа со знаками различных валют
Если вы сталкиваетесь с разными валютами, например евро или фунты стерлингов, придется адаптировать регулярное выражение с учетом различных символов и форматов.
let number = parseFloat("€1.234,56".replace(/[^\d,.-]/g, '').replace(',', '.'));
console.log(number); // тогда мы получим 1234.56
На этом примере демонстрируется обработка запятой в качестве десятичного разделителя, стандартной для многих стран.
Применение библиотек для учета локализации
Чтобы учесть особенности различных локалей, можно применить jQuery Globalize:
Globalize.culture('fr-FR'); // задаем французскую локаль
let number = Globalize.parseFloat("1 234,56 €");
console.log(number); // вывод 1234.56
Благодаря Globalize преобразование строк с учетом локализации будет простым и быстрым.
Работа со значимостью чисел с плавающей точкой
В работе с денежными значениями критичен уровень точности вычислений. Однако в JavaScript возможны особенности, связанные с этой точностью:
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. Она позволяет гибко преобразовывать строки:
let number = accounting.unformat("$1,234,567.89");
console.log(number); // в итоге получаем 1234567.89
Работа с особыми форматами денежных значений
Регулярное выражение можно настроить для обработки как ведущих и замыкающих символов валюты, так и отрицательных значений:
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
Здесь мы используем скобки для обозначения отрицательных чисел и удаляем знаки, часто встречающиеся в формах бухгалтерского учета.
Полезные материалы
- parseFloat() – JavaScript | MDN — Официальная документация по функции
parseFloat()
. - Strip all non-numeric characters from string in JavaScript – Stack Overflow — Различные способы очистки строк от лишних символов.
- JavaScript RegExp Object – Using Regular Expressions with Client Side Scripting — Инструкция по применению регулярных выражений в JavaScript.
- Intl.NumberFormat – JavaScript | MDN — Форматирование числовых значений с учетом локализации.
- Working with large integers in JavaScript — Как работать с большими числами, обеспечивая высокую точность.
- Numbers — Основные принципы числовых преобразований в JavaScript.