Лучшая практика - форматирование нескольких валют - PullRequest
17 голосов
/ 24 апреля 2009

Какова наилучшая практика для сценария, указанного ниже?

У нас есть приложение, которое мы хотели бы поддерживать несколько валют. Программное обеспечение будет учитывать языковые и региональные настройки пользователей для определения правильного формата чисел, т. Е. 10 000,00 долл. США или 10 000,00 долл. США и т. Д.

Однако мы хотели бы иметь возможность форматировать разные числа на основе идентификатора валюты (возможно, трехбуквенный код ISO4217). Наша идея состоит в том, чтобы сохранить таблицу в базе данных с каждой валютой, а затем попросить пользователя выбрать символ валюты, который будет использоваться. Затем программа отформатирует все числа в соответствии с настройками языка / региона, но будет использовать символ валюты, определенный в нашей программе.

Итак, учитывая следующие значения и валюты
10000 AUD
5989,34 долларов США
450 EUR

программа выдаст
$ 10000,00
$ 5,989.34
€ 450,00

или с региональной настройкой, в которой числа были сформатированы как #####, ## $, результатом будет;
10000,00 $
5989,34 $
450,00 €

Относительно форматирования номеров локали / региона, но с отображением разных валют, что лучше для этого делать?

Надеюсь, это имеет смысл.

Используется технология c # .NET 2.0.

Ответы [ 5 ]

7 голосов
/ 02 июля 2009

Я думаю, что этот вопрос - отличный и четкий ответ относительно того, ЧТО вы должны делать

SO - правильный формат валюты, когда не отображается собственная валюта культуры

И у этого Q есть хороший ответ, КАК сделать это в C #

SO - Форматирование валюты

3 голосов
/ 24 апреля 2009

Похоже, вы разбираетесь с лучшими практиками форматирования данных. На вашем месте я бы меньше беспокоился о том, что технически является стандартом, но больше сосредоточился бы на том, к чему привыкли ваши пользователи.

Если вы работаете на рынках, где пользователи достаточно хорошо разбираются в разных валютах, это совсем другое дело, чем иметь больше монокультурных пользователей. В зависимости от ситуации вам нужно будет разработать свой интерфейс по-другому.

Более того, если вам необходимо отобразить любую валюту для любой локаль, вам лучше всего подойдет стандарт ISO4217 . Это то, что показывают в пунктах обмена валют по всему миру, на пунктах обмена валют, счетах и ​​т. Д. В противном случае отображение символов валюты может быть довольно запутанным для некоторых пользователей, и этот символ сам по себе не указывает, в какой валюте фактически находится сумма.

Я бы также сослался на следующие вопросы SO. Не все из них имеют прямое отношение к вашей проблеме, но у них очень хорошие мета-дискуссии по вопросам, связанным с поддержкой нескольких валют.

1 голос
/ 24 апреля 2009

Вместо того, чтобы хранить только символ валюты, вы можете сохранить строку культуры для каждого кода валюты, поэтому AUD -> en-AU

CultureInfo ci = new CultureInfo("en-AU");
currencyValue.ToString( "c", ci );

Я не уверен, насколько гибко доступно форматирование.

Не уверен, поможет ли это:

Форматирование числовых данных для конкретной культуры

0 голосов
/ 13 февраля 2017

Я столкнулся с подобной ситуацией. Я нашел способ, не знаю, насколько это будет полезно для вас. Но это решило мои проблемы. Я установил строку сеанса для каждого места, например, Session ["cur"] = "0.000" или "0.00" для каждой аутентификации входа в систему. И где бы ни была валюта в системе, я использовал .ToString [Session ["cur"]. ToString ()] для переменных модели. Это помогло мне. Надеюсь, вам это тоже поможет.

0 голосов
/ 24 апреля 2009

Вы можете сохранить денежную стоимость в виде десятичной дроби, а затем добавить символ валюты в пользовательском интерфейсе.

Фаулер обсуждает схему денег в Шаблоны архитектуры корпоративных приложений здесь: http://www.martinfowler.com/eaaCatalog/money.html

...