Как сделать конвертер валют js

Обновлено: 08.07.2024

Учебник w3school по javascript для начинающих на урду-хинди - Операторы присваивания - Класс 18

Я пытаюсь сделать конвертер валют, который конвертирует несколько разных валют при изменении. Он использует некоторые заранее определенные обменные курсы. Отображаются поля ввода, но похоже, что ни один из javascript не работает. Любая помощь?

Отредактировано с обновленным кодом. Все равно ничего не конвертирует.

  • Что хорошего в конвертере валют с жестко заданными курсами? Может получать данные в реальном времени из множества различных API, используя javascript
  • Я согласен, это просто для работы с javascript для uni.

Вам нужно удалить var заявления от initialize функцию и добавьте их над этой функцией:

В этом случае переменные gbp, usd, eur, cad, aud будет виден в областях видимости других функций.

Возможно, вам нужно больше узнать о переменных и областях. Например в MDN. Области видимости и закрытия очень важны в JS.

  • Спасибо. Теперь это работает, когда я ввожу значение в фунтах стерлингов, но не для других.
  • Я думаю, что у меня будет отдельная функция для каждой валюты, а не пытаться повторно использовать calculate ()
  • @BenMcAlindin да, наверное, будет лучше

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

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

Есть несколько хороших статей, объясняющих, что на самом деле происходит, когда вы делаете это вне офиса, например здесь

Когда занимаешься вычислениями, связанными с денежными значениями, каждая копейка должна быть на счету. К сожалению, числовой тип в JavaScript не предназначен для таких задач. В этой статье мы расскажем, как правильно работать с деньгами в JS.


Photo by Ibrahim Boran on Unsplash

В современных языках программирования есть одна любопытная вещь. Когда кто-нибудь задумывает создать новый язык, он уделяет очень много времени и внимания допустимым типам данных и внутренним вспомогательным библиотекам.

Подумайте обо всех языках программирования, с которыми вам уже доводилось работать. Сколько в них есть методов для работы с датами и временем? В большинстве языков есть как минимум один. Потому что с таким форматом данных разработчику приходится иметь дело постоянно.

А что не так с деньгами? Банки, брокеры, онлайн-магазины и т. д. — всем им нужно работать с деньгами программными методами. И ведь этот запрос не вчера возник.

Из-за недостатка репрезентативности денежные типы обрабатываются множеством разных способов, в зависимости от используемого языка. В результате программиста, работающего с ними, подстерегают ловушки.

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

Распространенные ловушки

Но прежде чем перейти к ловушкам, давайте обсудим, что вообще требуется для осуществления денежных вычислений.

Не используйте числа с плавающей запятой для работы с денежными значениями

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

Обычно они представляются как степени 10:

Но в компьютере представление денег в десятичных дробях приводит к некоторым проблемам.

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

Это происходит потому, что компьютер пытается как можно больше округлить число для получения наилучшего результата. Он также обрезает слишком большие числа, например, повторяющиеся знаки после запятой.

Вы можете решить округлить результат предыдущей операции самостоятельно, скажем, при помощи Math.ceil :

Но этот подход тоже проблематичен, поскольку в процессе вы теряете пару пенни. Это зависит от вашего приложения, но подобные потери пары пенни могут привести к утрате больших сумм денег для ваших клиентов или вашего бизнеса.

Number тоже не используйте

Как и во многих других языках, в JavaScript Number — это примитивный объект-обертка. Он используется, когда разработчику нужно представить числа (как целые, так и десятичные дроби) и произвести с ними какие-то манипуляции.

Но поскольку это значение — число двойной точности, оно представляет ту же угрозу, о которой мы говорили в предыдущем разделе.

Кроме того, Number также не имеет одного из условий Фаулера для создания идеальной денежной структуры: валюты. Если ваше приложение в настоящее время работает только с одной валютой, это не проблема. Но это может быть опасно, если что-то изменится в будущем.

Intl API

API интернационализации ECMAScript представляет собой результат коллективных усилий по созданию стандартизированного форматирования для международных целей. Этот API позволяет приложениям самим решать, какие функции им нужны.

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

Взгляните не следующий пример:

Мы создаем три разных форматтера, передающих разные локали для валют США, Бразилии и Японии соответственно. Возможности этого API одновременно учитывать и сумму, и валюту, и осуществлять гибкие вычисления с ними просто потрясают.

Обратите внимание, как меняется десятичная система в зависимости от страны и как правильно Intl API вычислил денежную сумму для всех валют.

Если вы хотите установить максимальное количество значащих цифр, просто измените этот код на следующий:

Это то, что обычно происходит, когда вы платите за топливо на заправке.

API даже позволяет форматировать денежное значение, включая знак валюты отдельной страны:

Больше того: он позволяет конвертацию различных форматов, таких как скорость (км/ч) и объем (литры). По этой ссылке вы можете найти все доступные опции для NumberFormat в Intl.

Тем не менее, важно обращать внимание на поддержку этой фичи в браузерах. Хотя это стандарт, некоторые версии браузеров не поддерживают часть опций. Например, Internet Explorer и Safari.

Если вы хотите, чтобы ваше приложение поддерживалось и в этих браузерах, будет желательно применять fallback.


Photo by Annie Spratt on Unsplash

Dinero.js, Currency.js и Numeral.js

Как обычно, для поддержки недостающих функций в языке можно найти отличные библиотеки. Например, dinero.js, currency.js и numeral.js.

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

Dinero.js

Dinero.js — это легковесная, иммутабельная и chainable JavaScript-библиотека, созданная для работы с денежными значениями. (Chainable — поддерживающая прием, при котором после вызова метода возвращается исходный объект, что позволяет выполнять методы последовательно, а не вызывать их по отдельности, — прим. ред.)

Библиотека предоставляет глобальные настройки, расширенные функции для форматирования и округления, простую конвертацию валют и нативную поддержку Intl.

Для установки библиотеки достаточно запустить одну команду:

Одно из самых больших преимуществ использования Dinero.js состоит в том, что в ней применяется Фаулеровское определение денег. А это означает поддержку значений как суммы, так и валюты:

Кроме того, эта библиотека предоставляет дефолтные методы для денежных вычислений:

Важно отметить, что Dinero.js предназначена для работы не только с центами. Просто значение суммы указывается в наименьших денежных единицах используемой валюты. Если речь идет о долларах США, то наименьшая единица — цент, а значит, деньги представляются в центах.

Для помощи с форматированием библиотека предоставляет метод toFormat() . Он принимает строку с шаблоном, по которому вы хотите форматировать суммы:

То, как библиотека управляет форматами, контролируете вы сами. Например, если вы работаете с валютами другого типа (например, такими, где после запятой идет больше двух цифр), можно явно определить нужную точность:

Возможно, одна из самых классных особенностей этой библиотеки — это поддержка chainable-подхода к методам. Благодаря ей улучшается читаемость и облегчается поддержка кода:

Dinero.js также дает возможность настроить локальный или удаленный API для конвертации валют при помощи метода convert. Вы можете получить обменные данные из внешнего REST API или настроить локальную базу данных с файлом JSON. Этот файл Dinero.js сможет использовать для выполнения преобразований.

Currency.js

Currency.js — это очень маленькая (всего 1,14 kB) JavaScript-библиотека для работы со значениями валют.

Чтобы решить проблему плавающей запятой, о которой мы говорили выше, currency.js работает с целыми числами (под капотом). Таким образом обеспечивается постоянная точность десятичных значений.

Чтобы установить библиотеку, введите команду:

Эта библиотека может быть даже более лаконичной, чем Dinero.js. Денежное значение (строка, десятичное число, валюта) инкапсулируется в объект currency():

API ясный и понятный, поскольку тоже следует chainable-стилю:

Он также принимает строковые параметры, такие как денежное значение с символом валюты, как показано выше. Метод format() , в свою очередь, возвращает более человекочитаемый формат валюты.

Но стоит отметить, что по умолчанию currency.js настроена на работу в локали US. Если вы хотите работать с другими валютами, нужно приложить дополнительные усилия:

Библиотка Currency.js более лаконичная, чем Dinero.js, и это отлично. Но в ней нет встроенного способа проводить конвертацию валют. Имейте это в виду, если хотите использовать ее в своем приложении.

Numeral.js

Numeral.js — библиотека JavaScript общего назначения. Она умеет форматировать числа и осуществлять различные операции с ними.

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

Установка библиотеки выполняется одной командой:

Синтаксис имеет много общего с currency.js, но денежное значение инкапсулируется в объект numeral() :

Что касается форматирования значений, тут синтаксис больше напоминает Dinero.js:

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

Что касается chainable паттерна, numeral.js тоже обеспечивает отличную читаемость:

Numeral.js — наиболее гибкая библиотека для работы с числами в нашем списке. Ее гибкость проявляется в возможности создавать локали и форматы по желанию разработчика. Но нужно проявлять осторожность: библиотека не предоставляет, например, дефолтного способа вычислений с нулевой точностью для десятичных чисел.

Итоги

В этой статье мы исследовали несколько наилучших вариантов для работы с денежными значениями в JavaScript. Давайте повторим самые важные моменты:

Как мне найти все части текста, содержащие € или EUR или другую валюту, чтобы конвертировать их в другую валюту по моему выбору?

  1. Как изолировать число слева или справа от знака € или EUR или другого знака валюты?
  2. Как мне заменить это самое число измененным значением?
  3. Как я могу применить это ко всем номерам веб-страницы, которые имеют знак € или EUR или другую валюту до или после?

2 ответа

Как я могу получить все названия валют или коды, которые поддерживает конвертер валют Yahoo finance? я попытался использовать язык запросов yahoo (YQL) с различными операторами Select, но ничего не получилось. есть ли какой-нибудь запрос Yahoo или есть какой-то другой способ получить эти названия.

Вот пример кода для поиска в тексте любых валют и конвертации в целевую валюту:

Может ли это решить вашу проблему?

Edit: Обновил код выше, чтобы включить вашу желаемую целевую валюту DEM, и сделал regex/replacer поддержкой как префиксов, так и суффиксов, а также sourceCurrency

Edit2: Снова обновил код для обработки десятичных чисел

В тексте просто невозможно узнать, действительно ли используется валюта.

Например, как вы можете различать эти:

  • Валюта евро в порядке
  • Нам нужно 50 € (EUR)
  • Отличается от 50€
  • И то же самое для $
  • Который можно использовать следующим образом $50
  • Или вот так 50 долларов
  • Или даже вот так 50$ (по европейцам)

Если у вас есть строка, которая, как вы знаете , является валютой, вы можете играть таким образом:

Я хотел бы, чтобы конвертер валют XE был интегрирован в мой сайт, но хотел бы, чтобы вывод на моем сайте был на той же странице и не перенаправлялся на сайт XE, как это реализовать? с iframe? Пожалуйста, не могли бы вы привести мне пример? Большое спасибо.

Я пытаюсь сделать конвертер валют,который конвертирует между несколькими различными валютами при изменении. Он использует некоторые заранее определенные обменные курсы. Отображаются поля ввода, но ни один из javascript, похоже, не работает. Кто-нибудь поможет? Отредактировано с обновленным кодом.

Похожие вопросы:

давным-давно я пытаюсь создать конвертер валют для android, который имеет живой обменный курс от webservice. но я не могу, Может ли кто-нибудь дать мне, как получить тариф от веб-сервиса? и более.

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

Я начал делать конвертер валют. Вот как выглядит этот код: printWhat currency would you like to convert from?(british,yen): currency_in = gets.to_s printWhat currency would you like to convert.

Я новичок в javascript и пытаюсь сделать простой конвертер валют, он отлично работает, когда я выбираю £фунт, £фунт или £фунт R$Real, но когда я выбираю R$Real R$Real, выполняется расчет Pound.

Как я могу получить все названия валют или коды, которые поддерживает конвертер валют Yahoo finance? я попытался использовать язык запросов yahoo (YQL) с различными операторами Select, но ничего не.

Я хотел бы, чтобы конвертер валют XE был интегрирован в мой сайт, но хотел бы, чтобы вывод на моем сайте был на той же странице и не перенаправлялся на сайт XE, как это реализовать? с iframe.

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

Я работаю над веб-сайтом, и мне нужен динамический конвертер валют. Эта ссылка на ссылочный сайт - это то, что я действительно хочу на своем сайте.

Как мне найти все части текста, содержащие € или EUR или другую валюту, чтобы конвертировать их в другую валюту по моему выбору?

  1. Как изолировать число слева или справа от знака € или EUR или другого знака валюты?
  2. Как мне заменить это самое число измененным значением?
  3. Как я могу применить это ко всем номерам веб-страницы, которые имеют знак € или EUR или другую валюту до или после?

2 ответа

Как я могу получить все названия валют или коды, которые поддерживает конвертер валют Yahoo finance? я попытался использовать язык запросов yahoo (YQL) с различными операторами Select, но ничего не получилось. есть ли какой-нибудь запрос Yahoo или есть какой-то другой способ получить эти названия.

Вот пример кода для поиска в тексте любых валют и конвертации в целевую валюту:

Может ли это решить вашу проблему?

Edit: Обновил код выше, чтобы включить вашу желаемую целевую валюту DEM, и сделал regex/replacer поддержкой как префиксов, так и суффиксов, а также sourceCurrency

Edit2: Снова обновил код для обработки десятичных чисел

В тексте просто невозможно узнать, действительно ли используется валюта.

Например, как вы можете различать эти:

  • Валюта евро в порядке
  • Нам нужно 50 € (EUR)
  • Отличается от 50€
  • И то же самое для $
  • Который можно использовать следующим образом $50
  • Или вот так 50 долларов
  • Или даже вот так 50$ (по европейцам)

Если у вас есть строка, которая, как вы знаете , является валютой, вы можете играть таким образом:

Я хотел бы, чтобы конвертер валют XE был интегрирован в мой сайт, но хотел бы, чтобы вывод на моем сайте был на той же странице и не перенаправлялся на сайт XE, как это реализовать? с iframe? Пожалуйста, не могли бы вы привести мне пример? Большое спасибо.

Я пытаюсь сделать конвертер валют,который конвертирует между несколькими различными валютами при изменении. Он использует некоторые заранее определенные обменные курсы. Отображаются поля ввода, но ни один из javascript, похоже, не работает. Кто-нибудь поможет? Отредактировано с обновленным кодом.

Похожие вопросы:

давным-давно я пытаюсь создать конвертер валют для android, который имеет живой обменный курс от webservice. но я не могу, Может ли кто-нибудь дать мне, как получить тариф от веб-сервиса? и более.

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

Я начал делать конвертер валют. Вот как выглядит этот код: printWhat currency would you like to convert from?(british,yen): currency_in = gets.to_s printWhat currency would you like to convert.

Я новичок в javascript и пытаюсь сделать простой конвертер валют, он отлично работает, когда я выбираю £фунт, £фунт или £фунт R$Real, но когда я выбираю R$Real R$Real, выполняется расчет Pound.

Как я могу получить все названия валют или коды, которые поддерживает конвертер валют Yahoo finance? я попытался использовать язык запросов yahoo (YQL) с различными операторами Select, но ничего не.

Я хотел бы, чтобы конвертер валют XE был интегрирован в мой сайт, но хотел бы, чтобы вывод на моем сайте был на той же странице и не перенаправлялся на сайт XE, как это реализовать? с iframe.

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

Я работаю над веб-сайтом, и мне нужен динамический конвертер валют. Эта ссылка на ссылочный сайт - это то, что я действительно хочу на своем сайте.

Читайте также: