@woebegone

Как сделать автоматический конвертер валют определенной суммы по текущему курсу на jquery?

У примеру у меня на сайте есть товары с ценником в $ и я хочу рядом с каждым из них, вывести еще и в рублях но по актуальному курсу. Как такое реализовать?
  • Вопрос задан
  • 605 просмотров
Пригласить эксперта
Ответы на вопрос 2
iiiBird
@iiiBird
Пока ты спишь - твой конкурент совершенствуется
берешь API какого-нибудь сервиса валют. к примеру у центробанка есть апи. ну и делаешь конвертацию
Ответ написан
Сразу говорю, код из старого проекта и не факт, что оптимальный способ сделать конвертацию. А еще использовать JQuery в 2021 не модно.

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

Получение курса валют:
$.getJSON('https://www.cbr-xml-daily.ru/daily_json.js', function (data)
    {
        let USDrate = Number(data.Valute.USD.Value);
        let USDNominal = Number(data.Valute.USD.Nominal);

        $('input[name="usd-rate"]').val((USDrate / USDNominal).toFixed(2));
    })
    .fail(function (jqXHR, textStatus, errorThrown)
    {
        // Делаю блок выбора валют неактивным, путем добавление CSS класса
        $('.currency-select-container').addClass('disabled');
    });


Конвертация при клике:
$(document).on('click', '.currency-select-container .item', function ()
{
    let convertedTotal = 0;

    let actualTotal = $('input[name="actualTotal"]').val();         // Сумма для конвертации
    let initialCurrency = $('input[name="initialCurrency"]').val(); // Изначальная валюта

    // Значение выбранной валюты (например из data арибута). Значения USD, EUR и т.д.
    let selectedCurrency = $(this).data('name').toLowerCase();

    // Отношение выбранной валюты к рублю
    let currencyRate = $('input[name="' + selectedCurrency + '-rate"]').val();

    // Отношение к изначальной валюте. Если конвертация всегда из рублей, то это значение всегда = 1
    let initialRate = $('input[name="' + initialCurrency.toLowerCase() + '-rate"]').val();

    if (initialCurrency === "RUB")
    {
        // Если изначальная валюта рубли, то просто конвертируем,
        // используя ранее полученное значение отношения валют
        convertedTotal = actualTotal / currencyRate;
    }
    else
    {
        // Если конвертация не из рублей, то сначала получаю сумму в рублях
        // После чего также обычная конвертация
        let totalInRub = actualTotal * initialRate;
        convertedTotal = totalInRub / currencyRate;
    }

    // 1000 в RUB это 13,64 в USD
    console.log(actualTotal + ' в ' + initialCurrency + ' это ' + convertedTotal.toFixed() + ' в ' + selectedCurrency);
});


Вот пример того, что хранится в инпутах:
image.png
По кнопкам думаю и так понятно из кода выше. Там просто должен быть data-атрибут с наименованием валюты, в которую хотите выполнить конвертацию.

Еще раз повторюсь, что это лишь моя реализация и она далека от идеала (а может и вообще неправильная).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы