2013-02-21 87 views
0

我有一個允許用戶輸入價格的表單,例如10.00將字符串轉換爲十進制 - 保留數字

但是,由於表單是純文本,用戶可以輸入$10.0010.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

*爲什麼*不能在UI中完成?您應儘早限制您的輸入,不要讓用戶輸入任何他們想要的內容,然後嘗試弄清楚他們的意思。如果我使用了您的應用程序並輸入「10.00 foo 11 bar 1.1.10baz」,該怎麼辦? – 2013-02-21 18:48:39

+2

老實說,我會修剪,刪除$符號,如果它仍然無效,我會拋出一個異常。 – 2013-02-21 18:48:50

+0

是的,通過允許額外的輸入,它爲你創建了更多的錯誤處理代碼。如果您可以過濾一個批量,它將運行更平滑,並且需要更少的時間。 – Greg 2013-02-21 18:57:14

回答

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,直到你合併本地化的分隔符... – 2013-02-21 18:59:15

+1

我只是因爲用戶輸入的值爲「每本書$ 0.00」而無法區分「$每本書」 – James 2013-02-21 19:00:28

+0

TryGet方法會使傳統方法成爲TryGet方法,名爲TryXxx的方法通常會返回bool值。 – 2013-02-21 19:03:49

相關問題