Значение Zend_Currency с центами вместо долларов

Я использую Zend_Currency и хотел бы хранить значения в центах (в отличие от долларов) из-за других частей системы, которые работают в центах. Итак, я хотел бы инициализировать и получить значения для объектов Zend_Currency в центах, есть ли способ настроить Zend_Currency таким образом?

Я знаю, что я мог бы просто разделить на 100, когда я получу значение, но я не знаю, насколько это совместимо, когда / если нам потребуется интернационализация. то есть. Все валюты имеют 100 центовых единиц к доллару.

1 ответ

Являются ли все валюты 100 центов к доллару?

Нет.

Хотя большинство из них, есть несколько, которые имеют основание '5' или основание '1000' или вообще не имеют десятичной дроби.

источник: http://en.wikipedia.org/wiki/List_of_circulating_currencies

Вы должны использовать Zend Currency для хранения исходного значения и позволить ему делать преобразования для вас.

    // original money
    $money = new Zend_Currency('US');
    $money->setValue('100.50');

    // conversion
    $oman = new Zend_Currency('OM');
    $oman->setService(new My_Currency_Exchange());
    $oman->setValue($money->getValue(), $money->getShortName());
    var_dump($money->getValue(), $oman->getValue());

Примечание: My_Currency_Exchange() - это фиктивный класс, который я создал, он выглядит так:

<?php

class My_Currency_Exchange implements Zend_Currency_CurrencyInterface
{
public function getRate($from, $to)
{
    if ($from !== "USD") {
        throw new Exception ('We only do USD : '  . $from);
    }

    switch ($to) {
        case 'OMR':
            // value from xe.com as of today
            return '2.59740';
    }
    }
}

выход:float(100.5) float(261.0387)

Другие вопросы по тегам