Лучшая практика - форматирование нескольких валют
Какова наилучшая практика для сценария, указанного ниже?
У нас есть приложение, которое мы хотели бы поддерживать несколько валют. Программное обеспечение будет учитывать языковые и региональные настройки пользователей для определения правильного формата чисел, например, $10 000,00 или 10 000,00,00 и т. Д.
Однако мы хотели бы иметь возможность форматировать разные числа на основе идентификатора валюты (возможно, трехбуквенный код ISO4217). Наша идея - сохранить таблицу в базе данных с каждой валютой, а затем запросить у пользователя выбрать символ валюты, который будет использоваться. Затем программа отформатирует все числа в соответствии с настройками локали / региона, но будет использовать символ валюты, как определено в нашей программе.
Итак, учитывая следующие значения и валюты
10000 AUD
5989,34 долларов США
450 евро
программа выдаст
$10,000.00
$ 5,989.34
€ 450,00
или с региональной настройкой, которая форматирует числа как #####,##$, результатом будет;
10000,00 $
5989,34 $
450,00 €
Относительно форматирования чисел региона / региона, но с отображением разных валют, что является лучшим способом для этого?
Я надеюсь это имеет смысл.
Используемая технология - C# .NET 2.0.
5 ответов
Я думаю, что этот вопрос является отличным и четким ответом на то, что вы должны делать
SO - правильный формат валюты, когда не отображается собственная валюта культуры
И этот вопрос имеет хороший ответ, как сделать это в C#
Похоже, вы разбираетесь с лучшими практиками форматирования данных. На вашем месте я бы меньше беспокоился о том, что технически является стандартом, но больше сосредоточился бы на том, к чему привыкли ваши пользователи.
Если вы работаете на рынках, где пользователи достаточно хорошо разбираются в разных валютах, это совсем другое дело, чем иметь больше монокультурных пользователей. В зависимости от случая вам нужно будет разработать свой интерфейс по-разному.
Более того, если ваше требование состоит в том, чтобы отображать какую-либо валюту в любом регионе, лучше всего будет использовать стандарт ISO4217. Это то, что показывают в пунктах обмена валют по всему миру, на обменах валют, счетах и т. Д. В противном случае отображение символов валюты может быть довольно запутанным для некоторых пользователей, и этот символ сам по себе не указывает, какую валюту на самом деле составляет сумма.
Я также хотел бы сослаться на следующие вопросы SO. Не все из них имеют прямое отношение к вашей проблеме, но у них очень хорошие мета-дискуссии по вопросам, связанным с поддержкой нескольких валют.
Вместо того, чтобы хранить только символ валюты, вы можете сохранить строку культуры для каждого кода валюты, поэтому AUD -> en-AU
CultureInfo ci = new CultureInfo("en-AU");
currencyValue.ToString( "c", ci );
Я не уверен, сколько гибкости есть в доступном форматировании.
Не уверен, что это поможет:
Я столкнулся с подобной ситуацией. Я нашел способ, не знаю, насколько это будет полезно для вас. Но это решило мои проблемы. Я установил строку сеанса для каждого места, например, Session["cur"]="0.000" или "0.00" для каждой аутентификации входа в систему. И где бы ни была валюта в системе, я использовал.ToString[Session["cur"].ToString()] для переменных модели. Это помогло мне. Надеюсь, это вам тоже поможет.
Вы можете сохранить денежную стоимость в виде десятичной дроби, а затем добавить символ валюты в пользовательском интерфейсе.
Фаулер обсуждает модель денег в шаблонах архитектуры корпоративных приложений здесь: http://www.martinfowler.com/eaaCatalog/money.html