2009-07-31 4 views
3

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

Я просто делаю замену («$», «») и («,», «») или есть другой способ, которым я должен обрабатывать этот вид ввода?

ответ

20

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

var d = Decimal.Parse(input, 
    NumberStyles.AllowCurrencySymbol | 
    NumberStyles.AllowDecimalPoint | 
    NumberStyles.AllowThousands); 
5

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

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

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

+0

Могу ли я спросить, почему вы заменяя пробелы стеклотары вместо обрезки их? –

+0

Я перечислил URL-адрес сайта, на котором я снял код, я сам его не писал (зачем тратить пару минут на создание колес, когда 15 секунд Google получает ответ?). Пример, приведенный на сайте, относится к тому, когда кто-то разместил пробел после символа валюты –

+0

Да. Вам нужно только добавить NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite вместо выполнения замены строки. Возможно, удаление пробелов в середине было бы неверным, поскольку оно потенциально подтвердило бы что-то неправильное. – tvanfosson

5

ли я вобще Replace("$", "") и Replace(",", "") [?]

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

[I] Есть ли другой способ обработки такого ввода?

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

string s = "$1,250.00"; 
decimal d = decimal.Parse(s, NumberStyles.Currency); 
-2

Это должно сделать трюк:


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

 Смежные вопросы

  • Нет связанных вопросов^_^