Ответ 1
Я думаю, что это Q - отличный и ясный ответ о том, что вы должны делать
SO - Правильный формат валюты, когда не отображается национальная валюта культуры
И у этого Q есть хороший ответ КАК сделать это в С#
Какова наилучшая практика для приведенного ниже сценария?
У нас есть приложение, которое мы хотели бы поддерживать несколькими валютами. Программное обеспечение будет уважать локали пользователей и региональные настройки, чтобы диктовать правильный формат номера, то есть 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 €
Соблюдение форматирования номера языка/региона, но отображающее разные валюты, что лучше всего подходит для этого?
Надеюсь, это имеет смысл.
Используемая технология - С#.NET 2.0.
Я думаю, что это Q - отличный и ясный ответ о том, что вы должны делать
SO - Правильный формат валюты, когда не отображается национальная валюта культуры
И у этого Q есть хороший ответ КАК сделать это в С#
Похоже, у вас есть дескриптор лучших практик для форматирования данных. Если бы я был вами, я бы меньше беспокоился о техническом стандарте, но больше сосредоточился на том, к чему привыкли ваши пользователи.
Если вы работаете на рынках, где пользователи довольно разбираются в разных валютах, это совсем другое дело, чем наличие более монокультурных пользователей. В зависимости от случая вам нужно будет создать свой интерфейс по-другому.
Кроме того, если ваше требование состоит в отображении любой валюты в любой, ISO4217 это ваш лучший выбор. Это то, что показано в магазинах обмена валюты по всему миру, на валютных биржах, счетах и т.д. В противном случае отображение символов валюты может быть довольно запутанным для некоторых пользователей, и сам символ не указывает, какая валюта действительно на самом деле.
Я бы также упомянул следующие SO-вопросы. Не все из них напрямую связаны с вашей проблемой, но у них очень хорошие мета-дискуссии о проблемах, связанных с поддержкой нескольких валют.
Вместо сохранения только символа валюты вы можете сохранить строку культуры для каждого кода валюты, поэтому AUD → en-AU
CultureInfo ci = new CultureInfo("en-AU");
currencyValue.ToString( "c", ci );
Я не уверен, насколько гибкость существует при форматировании.
Не уверен, что это помогает:
Вы можете сохранить денежное значение в виде десятичной суммы, а затем добавить символ валюты в пользовательский интерфейс.
Фаулер обсуждает шаблон Money в Шаблоны архитектуры корпоративных приложений здесь: http://www.martinfowler.com/eaaCatalog/money.html
Я столкнулся с подобной ситуацией. Я нашел способ, не знаю, насколько он будет полезен для вас. Но он решил мои проблемы. Я установил строку сеанса для каждого места, такого как Session [ "cur" ] = "0.000" или "0.00" для каждой аутентификации входа. И где когда-либо была валюта в системе, я использовал .ToString [Session [ "cur" ]. ToString()] для переменных модели. Он помогло. Надеюсь, он вам тоже поможет.