Я должен сохранить несколько валют в SQL-сервере. Я понимаю, что SQL не будет поддерживать все различные типы валют (если я не сохраню его как строку, но я не хочу делать это).
Моя идея состояла в том, чтобы преобразовать все значения от их формата валюты до стандартного двухместного номера и хранилища это вместо этого. Затем просто переформатируйте на основе информации о культуре при отображении. Однако я попытался делать что-то как, например.
var cultureInfo = new System.Globalization.CultureInfo("en-US");
double plain = return Double.Parse("$20,000.00", cultureInfo);
Это, когда-либо кажется, не работает, это всегда бросает a FormatException
. Даже удаляя обозначение денежной единицы и просто пытаясь сделать это на основе одного только числа делает то же самое. Это - просто пример, я хочу поддерживать в значительной степени любой тип валюты.
Существует ли стандартный способ снять валюту и получить значение как двойное?
Думаю, это должно сработать:
double.Parse(currencyValue, NumberStyles.Currency);
Здесь вы можете узнать больше о NumberStyles .
Изменить: в случае, если кто-то видит этот ответ, не глядя на другие ответы / комментарии, этот ответ отвечает на вопрос, как написано, но хранить валюту в виде двойного
не очень хорошая идея, и было бы лучше использовать десятичное .
Вы должны передать NumberStyles функции Parse
Decimal.Parse("$20,000.00", NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, new CultureInfo("en-US"));
Еще несколько вещей, для валют я бы посоветовал вам использовать Decimal . И это может быть далеко, но может быть лучше сохранить данные о валюте как Деньги в БД и добавить код валюты для идентификации валюты стоимости.
Да, и ответы предполагают NumberStyles.Currency, что было бы лучше. Это значение pre-Or'd, если вы все еще думаете, что хотите использовать строки.