Как я могу принять строки типа «$ 1250,00» и преобразовать их в десятичную в C #? - PullRequest
3 голосов
/ 31 июля 2009

Как я могу принять строки типа «$ 1250,00» и преобразовать их в десятичную в C #?

Должен ли я просто заменить ("$", "") и (",", "") или есть другой способ обработки ввода такого типа?

Ответы [ 4 ]

20 голосов
/ 31 июля 2009

Пробовали ли вы Decimal.Parse с опцией AllowCurrencySymbol (и другими опорными опциями)?

var d = Decimal.Parse(input, 
  NumberStyles.AllowCurrencySymbol |
  NumberStyles.AllowDecimalPoint |
  NumberStyles.AllowThousands);
5 голосов
/ 31 июля 2009

Должен ли я просто сделать Replace("$", "") и Replace(",", "") [?]

Нет. С одной стороны, код, как это не весело поддерживать. Во-вторых, «$» - не единственный символ валюты в мире, а «,» - не единственный разделитель тысяч. То есть код, о котором вы думаете, усложняет проблемы глобализации.

[Есть] другой способ, которым я должен обработать этот тип ввода?

Да. Используйте Decimal.Parse с NumberStyles.Currency:

string s = "$1,250.00";
decimal d = decimal.Parse(s, NumberStyles.Currency);
5 голосов
/ 31 июля 2009

теперь с форматированием:)

decimal val = Decimal.Parse(
    Value.Replace(" ", ""), 
    NumberStyles.AllowThousands 
     | NumberStyles.AllowDecimalPoint 
     | NumberStyles.AllowCurrencySymbol
);

http://www.codeproject.com/KB/cs/Eduardo_Sierra.aspx

0 голосов
/ 31 июля 2009

Это должно сработать:


      string money = "$1,250.00";
      money = money.Replace('$',' ');
      decimal test = Convert.ToDecimal(money);
...