Лучшая практика - форматирование нескольких валют

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

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

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

Итак, учитывая следующие значения и валюты: 10000 AUD
5989,34 USD
450 EUR

программа выдала бы
10 000,00 долл. США
5 989,34 долл. США
450,00 евро

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

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

Я надеюсь это имеет смысл.

Используемая технология - C # .NET 2.0.


person Community    schedule 24.04.2009    source источник
comment
Вы должны сослаться на свой предыдущий вопрос, я думаю, они хорошо сочетаются друг с другом: stackoverflow.com/questions/783971/   -  person Elijah    schedule 24.04.2009


Ответы (5)


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

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

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

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

person Ryan    schedule 01.07.2009
comment
Я знаю, что это старый ответ, но вы должны процитировать здесь соответствующие части этих ссылок. - person Nathan Arthur; 12.12.2019

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

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

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

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

person Elijah    schedule 24.04.2009

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

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

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

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

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

person MikeW    schedule 24.04.2009
comment
Это не жизнеспособное решение для валют, которые используются в разных странах, например евро. В разных странах еврозоны числовые форматы различаются. - person Tormod Fjeldskår; 24.04.2009
comment
я согласен. числовой формат должен соответствовать текущей культуре компьютера, в то время как символ валюты представляет любую валюту. предложенное решение нежизнеспособно. - person ; 24.04.2009

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

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

person Iain Holder    schedule 24.04.2009

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

person Codex    schedule 13.02.2017