2009-12-29 118 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

相关问题