2013-02-21 3 views
0

У меня есть форма, которая позволяет пользователю вводить цену, например, 10.00.Преобразование строки в десятичный - оставить цифры

Однако в качестве формы пурпурного текста пользователь может ввести $10.00 или 10.00 for book. Я не могу изменить пользовательский интерфейс, это нужно сделать под капотом. Так что, в основном, какие бывают типы использования, я просто хочу получить десятичный результат.

Я начал делать это

public decimal FilterPrice(dynamic price) { 
    string convertPrice=price.ToString(); 

    var filterNumber= 
     from letter in convertPrice 
     where char.IsDigit(letter) 
     select letter; 

    return something; 
} 

Однако это полоса из .. Есть идеи, как это сделать?

+11

* Почему это не может быть сделано в пользовательском интерфейсе? Вы должны ограничить ввод в кратчайшие сроки, не позволяя пользователю вводить все, что захотите, а затем попытаться выяснить, что они означают. Что делать, если я использовал ваше приложение и набрал «10.00 foo 11 bar 1.1.10baz»? –

+2

Честно говоря, я бы обрезал, удалил знак $ и, если он все еще недействителен, я бы выбрал исключение. –

+0

Да, разрешая дополнительный ввод, он создает больше кода обработки ошибок для вас. Если вы можете фильтровать объем, прежде чем он будет работать более плавно и займет меньше времени. – Greg

ответ

5

Вы можете решить это с помощью простого регулярного выражения.

public bool TryGetPreisAsDecimal(string price, out decimal convertedPrice) 
    { 
     Match match = Regex.Match(price,@"\d+(\.\d{1,2})?"); 

     if (match != null) 
     { 
      convertedPrice = decimal.Parse(match.Value); 
      return true; 
     } 
     else 
     { 
      convertedPrice = 0.0m; 
      return false; 
     } 
    } 
+4

+0, пока вы не включите правильно локализованные разделители ... –

+1

Я бы сделал это методом TryGet просто потому, что пользователь вводил значение «$ 0.00 за книгу» не может быть дифференцирован от «$ за книгу» – James

+0

Метод с именем «TryXxx» обычно возвращает значение «bool». –

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