Не могу разобрать двойной - PullRequest
4 голосов
/ 23 октября 2010

Я пытаюсь разобрать такие значения, как $ 15 270,75, с выражением

double cost = 0;
double.TryParse("$15,270.75", NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out cost);

, но безуспешно

Ответы [ 5 ]

8 голосов
/ 23 октября 2010

Символом валюты инвариантной культуры является не $, это ¤. Это работает:

double cost = double.Parse("¤15,270.75", NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture);

Вам понадобится CultureInfo , поддерживающий именно этот формат.

4 голосов
/ 23 октября 2010

Следующие работы:

var culture = new CultureInfo("en-US");

culture.NumberFormat.CurrencyGroupSeparator = ".";
culture.NumberFormat.CurrencyDecimalSeparator = ",";

double.TryParse("$15.270,75", NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint, culture, out cost);

Культура, которую я здесь использовал, это en-US для символа $.Причина, по которой я вручную установил разделитель группы и десятичного разделителя, заключается в том, что формат, используемый во входной строке, отличается от культуры en-US.

Возможно, вы ожидаете, что определенная культура не является en-US.Попробуйте передать это.

1 голос
/ 23 октября 2010

Это не будет работать с CultureInfo.Invariant culture.Используйте соответствующий CultureInfo.

1 голос
/ 23 октября 2010

это потому что вы используете InvariantCulture. вам нужен американский CultureInfo

0 голосов
/ 23 октября 2010

Если вы хотите что-то, что работает для любой локали, используйте CultureInfo.CurrentCulture для параметра IFormatProvider.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...