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