2009-12-29 117 views
1

請幫我在我的C#代碼(WPF,事件處理),以確定問題:WPF C#字符串轉換爲十進制,十進制到字符串問題

 private void Discount5Btn_Click(object sender, RoutedEventArgs e) 
    { 
     decimal catPr; 
     decimal salePr; 
     string catPrStr; 
     catPrStr = PriceCatTBox.Text; 
     catPr = decimal.Parse(catPrStr); 
     salePr = decimal.Multiply(catPr, 0.95m); 
     SalePriceTBox.Text = (salePr).ToString("0000.00"); 
    } 

我不能讓它工作 - 調試器顯示的錯誤catPr = decimal.Parse(catPrStr);。在另一個地方非常類似的代碼工作。我是否正確地使用這種方法來進行算術運算的字符串十進制轉換?

編輯(添加)

對不起,不指定catPrStr值,它是從在下面的代碼的文本框(在另一個事件處理程序):

dlg.PriceCatTBox.Text = "2300.00"; 
.... 

然後如上:

catPrStr = PriceCatTBox.Text; 
+1

好的。什麼是catPrStr變量的值? – 2009-12-29 18:26:15

+0

謝謝,我在我的第一個問題中添加了關於「catPrStr」變量的內容,作爲 – rem 2009-12-29 18:43:52

回答

3

你確定你的文化(語言環境)設置不干擾嗎?如果catPrStr始終處於編輯問題中顯示的不變文化中,則可以使用decimal.TryParse(catPrStr, CultureInfo.InvariantCulture);來強制使用該文化。如果未指定文化,則解析在當前系統文化中完成,例如,可能使用逗號作爲小數分隔符。

+0

我沒有設法使用建議的「TryParse 「的方法,但問題確實在逗號。在我改變「dlg.PriceCatTBox.Text =」2300.00「;」以..「2300,00」..一切工作正常。謝謝! – rem 2009-12-29 20:24:47

+2

請注意,如果您對這樣的值進行硬編碼,則會在其他文化中失敗。您可能想使用'dlg.PriceCatTBox.Text = 2300.00.ToString(「0.00」)'來代替。 – 2009-12-29 20:31:32

1

我們不能幫你,因爲我們不知道catPrStr的價值,你是從StringDecimal,並且很可能被轉換的字符串值不正確。

+0

版本,謝謝,我在第一個問題中添加了關於「catPrStr」變量的內容 – rem 2009-12-29 18:47:29

+0

+1是的,它在那裏 – rem 2009-12-29 20:26:33

1

decimal.TryParse(catPrStr, out catPr);並處理布爾從它返回,以確保您有一個合理的價值來處理。

3

我是不是在這樣的做法 字符串十進制轉換爲 算術運算?

我會設置與模型的雙向綁定來存儲您的小數值。這將允許您直接訪問它們而不是解析字符串。這也將解決你的錯誤。

+0

WPF有很多數據綁定並會使這個相對微不足道。 – Ragepotato 2009-12-29 18:29:11

+1

+1 WPF數據綁定和MVVM模式旨在消除手動進行這些類型轉換的必要性 – 2009-12-29 18:32:22

+0

+1謝謝,我肯定會學習和使用它 – rem 2009-12-29 20:27:40

相關問題