2 валюты и более

Духовность™

Продвинутый новичок
2 валюты и более

Привет. Может кто сталкивался с задачей подобной.

У меня есть задание - сделать калькулятор, который считает всякие проценты и пр. лабуду в связке JS+PHP. Пока предполагается наличие 2 валют - USD и RUR. По техзаданию пользователь может выбрать в любой момент ту или иную валюту и все значения, присутствующие в программе, должны автоматически конвертироваться. Т.е. имеем мы кучу переменных в рублевом эквиваленте, нажал пользователь radio "USD" и всё должно сконвертироваться в USD. Нажал обратно - RUR - всё переходит в рубли.

Задача, кто решал подобное, только на первый взгляд кажется простой. На практике все гораздо сложнее.

1. Погрешность плавающих чисел. С этим позже разберусь.

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

Что я пока придумал - создать массив, многомерный, в котором под определенным ключом хранить денежную величину в целом. При выборе той или иной валюты проходить по массиву и делать конвертацию. Т.е массив будет имет вид типа
PHP:
'price' => array('usd'=>234, 'rur'=>'1298'),
'price2' => array('usd'=>111, 'rur'=>'2334'),
...
Вот. Кто что ещё умного может сказать по этому поводу?
 

akd

dive now, work later
Команда форума
1. хранить/считать все в одной валюте.
2. хранить курс.
3. показывать всегда по курсу. для валюты из п.1 курс = 1.00, для всех остальных валют, курс настоящий.
 

MiRacLe

просто Чудо
имею хэш со всеми кросс-курсами валют,
имею оригинальную валюту и её количество у каждого элемента
и могу в любой момент посчитать новую сумму в любой из валют.
 

Ravanger

Новичок
triumvirat
а хранить во всех валютах не? а пересчитывать только при добавлении позиции в каталог, а на клиент отдавать json объект в котором будут все валюты ?
 

Ravanger

Новичок
+ при изменении курса дергать какойнить скрипт который будет апдейтить старые значения
 

Духовность™

Продвинутый новичок
Ravanger
ой. какой нафик json?

akd
правильно ли я понял:

PHP:
<html><head></head><body>

<script type="text/javascript">
var price1 = 2500; // одна цена..
var price2 = 2000; // другая цена..

var usd_curs = 25.51; // курс уе
var normal_curs = 1.00; // по совету пользователя akd 

function view(val)
{
    var f1 = document.getElementById('f1');
    var f2 = document.getElementById('f2');
    
    // определяем текущий курс
    var current_curs = val == 'usd' ? usd_curs : normal_curs;
    
    f1.value = curs(price1, current_curs);
    f2.value = curs(price2, current_curs);
    
    return false;
}

// получаем конечный результат вычислений
// функция применяется исключительно при выводе значений - 
// конвертирует денежное значение в необходимый курс валюты
function curs(price, curs)
{
    return price/curs;
}
</script>
<form>
<input id="f1"><input id="f2">

<button onclick="return view('rur')">в рубли</button> <button onclick="return view('usd')">в уе</button>
</form>

</body></html>
 

Ravanger

Новичок
triumvirat
PHP:
<?php
$price1 = array('eur' => 20, 'uah' => 147.929); 
?>
<script>
var price = <?=json_encode($price1)?>
</script>
потом

PHP:
var f1 = document.getElementById('f1'); 
f1.value = price.eur;
select.onchange = function() {
     f1.value = price[select.value]
}
типа того

ща еще протестю :)


--- upd ----

вот рабочий пример
PHP:
<?php
$price1 = array('eur' => 20, 'uah' => 147.929); 
?>
<script>
var price = <?=json_encode($price1)?>
</script>
<span id="curr" onclick="calc(this);">uah</span>
<div id="f1"><div>
<script>

var f1 = document.getElementById('f1'); 
f1.innerHTML = price.eur;

function calc(obj) {
     f1.innerHTML = price[obj.innerHTML]
}
</script>
 

MiRacLe

просто Чудо
PHP:
<element currency="usd" value="100" />
<element currency="usd" value="200" />
<element currency="usd" value="300" />
<element currency="rur" value="100" />
----------------------------------------------------
var rates = {usd: {usd: 1, rur: 27.1932}, rur: {usd: 0.0368, rur: 1}};

function calculate(new_currency) {
   var sum = 0;
   $('element').each(function() {
      sum += rates[this.currency][new_currency] * this.value;
   });
   return sum;
}

calculate('rur');
Весьма условный код, но суть должна быть ясна - валют может быть бесчисленное множество, каждый элемент может иметь цену в своей валюте.
 

akd

dive now, work later
Команда форума
просто мы тут храним все деньги всегда в евро и выводим в большинстве случаев тоже в них, но если надо то подставить нужную валюту/несколько валют довольно просто.
 
Сверху