Проблема в том, что у вас есть товар, продающийся в разных режимах обмена с разными культурами. Скажем, в Америке это 1450,00 долларов США, а в Германии - 1111,11 евро. Есть два основных фактора:
A. Есть разные цены в разных валютах
B. Существуют разные способы отображения суммы денег в разных культурах
Что касается A, вы могли бы
- хранить в одной цене / валюте и на лету корректировать по разным курсам
- или настроить по ночам
- или просто разные цены в разных странах
Я бы пошел с таблицей цен, разделенных по валютам. вероятно, целесообразно обновлять каждую ночь:
ProductId Currency Price
1 EUR 1111.11
1 CAD 1436.65
1 USD 1450.00
Эти значения должны быть числами, чтобы при необходимости их можно было легко вычислить. Используйте десятичное число (10,2) в вашей базе данных
Относительно B
Вы должны отформатировать выбранную цену для данной культуры при отображении. Представьте, что американец платит в евро. Что они хотят увидеть? Ваш вывод будет выглядеть так, в зависимости от выбранной культуры:
Скажите, что это 1111,11 евро
Culture Price Long Name
de_de 1.111,11 (German)
fr_ca 1 111,11 (Quebec)
en_us 1,111.11 (US English)
Это все одинаковое количество, просто отформатированное по-разному, в зависимости от предпочтений пользователя.
Если пользователи вводят в разных количествах, вам также придется проанализировать их значения на основе выбранной культуры. Ознакомьтесь с возможностями Yii (извините, PHP) L10N и I18N .
Примечания:
Что бы вы ни делали, не храните это как число с плавающей запятой, иначе со временем вы получите незначительные ошибки. Используйте десятичный тип
Попробуйте использовать 4 цифры после десятичного знака для полей, которые являются результатом вычислений