Конвертировать любую строку валюты в двойную - PullRequest
38 голосов
/ 02 мая 2010

Мне нужно хранить несколько валют на сервере SQL. Я понимаю, что SQL не будет поддерживать все типы валют (если я не сохраню их в виде строки, но я не хочу этого делать).

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

var cultureInfo = new System.Globalization.CultureInfo("en-US");
double plain = return Double.Parse("$20,000.00", cultureInfo);

Кажется, это не сработает, всегда выбрасывает FormatException. Даже удаление символа валюты и просто попытка сделать это на основе одного числа делает то же самое. Это всего лишь пример, который я хочу поддержать практически любым типом валюты.

Существует ли стандартный способ вычеркивания валюты и получения значения в двойном размере?

Ответы [ 3 ]

94 голосов
/ 02 мая 2010

Я думаю, что это должно работать:

double.Parse(currencyValue, NumberStyles.Currency);

Здесь вы можете увидеть больше о NumberStyles .

Редактировать: Если кто-то видит этот ответ, не глядя на другие ответы / комментарии, этот ответ отвечает на вопрос в письменном виде, но хранение валюты в виде double не очень хорошая идея, и было бы лучше использовать десятичное вместо.

20 голосов
/ 02 мая 2010

Вы должны передать NumberStyles в функцию Parse

Decimal.Parse("$20,000.00", NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, new CultureInfo("en-US"));

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

Да, и ответы предполагают, что NumberStyles.Currency будет лучше. Это предварительное значение Or, если вы все еще думаете, что хотите использовать строки.

0 голосов
/ 29 января 2019

Вы также можете использовать tryparse ()

string input = "$2,000.00";
double parsed = 0d;
double.TryParse(input, NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, CultureInfo.CurrentCulture, out parsed))
...