输入字符串的格式不正确,“double.parse(textbox.text);”
本文关键字:textbox text parse double 字符串 格式 不正确 输入 | 更新日期: 2023-09-27 18:34:03
嗨,我是视觉工作室的新手。
到目前为止,这是我的代码,以制作一个 ATM 的示例,我有一个文本框,我输入了一个金额,然后我有这个按钮,我单击信用,它将金额添加到一个名为余额的标签中,我还有一个名为借记的按钮,它将钱从余额中拿走。我在 wpf c# 中执行此操作
到目前为止,我有这个。
namespace BankAccounts
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private double totalamount = 0;
public string balance1;
private void buttoncredit_Click(object sender, RoutedEventArgs e)
{
totalamount = totalamount + double.Parse(textboxamount.Text)
balance1 = "Your Balance is: £";
label2.Content = balance1 + totalamount;
textboxamount.Clear();
}
private void buttondebit_Click(object sender, RoutedEventArgs e)
{
if (totalamount - double.Parse(textboxamount.Text) < 0)
{
MessageBox.Show("Overdraft Limit is not set please contact Customer Services");
}
else
{
totalamount = totalamount - double.Parse(textboxamount.Text);
balance1 = " Your Balance is: £";
label2.Content = balance1 + totalamount;
textboxamount.Clear();
}
}
private void listboxtransactions_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
}
}
}
textboxamount.Text
中的字符串不能解析为双精度。为避免异常,您可以改用double.TryParse
。
double amount;
if(double.TryParse(textboxamount.Text, out amount))
{
totalamount += amount;
}
另外,label2
似乎很Label
,您必须使用
label2.Text = balance1 + totalamount;
相反。
您不能信任您的用户在文本框中完全键入双精度值。
如果输入无法转换为双精度型,则 Parse 方法无法避免异常。
而是双倍。TryParse 方法提供了测试键入的值是否实际上是双精度值的机会。此外,您似乎正在使用货币值,因此也许最好使用十进制数据类型,并且在构建输出字符串时使用适当的格式来获取适合您的区域设置的正确货币字符串。这也将避免双精度/单精度数据类型中固有的舍入误差
private decimal totalamount = 0;
public string balance1;
private void buttoncredit_Click(object sender, RoutedEventArgs e)
{
decimal temp;
if(decimal.TryParse(textboxamount.Text, out temp))
{
totalamount = totalamount + temp;
balance1 = "Your Balance is: ";
label2.Content = balance1 + totalamount.ToString("C");
textboxamount.Clear();
}
else
MessageBox.Show("Not a valid amount");
}
private void buttondebit_Click(object sender, RoutedEventArgs e)
{
decimal temp;
if(decimal.TryParse(textboxamount.Text, out temp))
{
if (totalamount - temp < 0)
{
MessageBox.Show("Overdraft Limit is not set please contact Customer Services");
}
else
{
totalamount = totalamount - temp;
balance1 = " Your Balance is: ";
label2.Content = balance1 + totalamount.ToString("C");
textboxamount.Clear();
}
}
else
MessageBox.Show("Not a valid amount");
}
两个主要问题会导致此错误:
- 任何其他文本,例如空格或货币字符。
- 不正确的本地化设置导致
,
和.
翻转。
可能包括,
但我不记得这是否是错误条件。
问题是 textboxamount.Text
中的值包含无法转换为双精度值的内容。
处理此问题的最佳方法是改用double.TryParse
:
private void buttoncredit_Click(object sender, RoutedEventArgs e)
{
double newAmount;
if(!double.TryParse(textboxamount.Text, out newAmount))
{
// The input is wrong - handle that
MessageBox.Show("Please enter a valid amount");
textboxamount.Focus();
return;
}
totalamount += newAmount;
balance1 = "Your Balance is: £";
label2.Content = balance1 + totalamount;
// .. Your code...