System.FormatException 解析文本时出现
System.FormatException occurs when parsing text
我是新来的,也是 C# 的新手,所以请多多关照。我正在为我的编程 class 分配作业,但我终其一生都无法解决问题。该程序是一个计算器,它从两个文本框获取输入并对它们进行操作,并禁用第二个文本框并使用按钮输入数字(数字键盘)。我正在使用 Visual Studio 2013 并多次检查我的代码并逐步完成它。这是我的代码:
static int checkFocusedTextbox = 1;
string operationPerformed;
double result = 0;
private void Operator_Click(object sender, RoutedEventArgs e)
{
// try
// {
Button button = (Button)sender;
operationPerformed = button.Content.ToString();
double num1 = double.Parse(inputOne.Text);
double num2 = double.Parse(inputTwo.Text);
if (checkFocusedTextbox == 1)
{
if ((inputOne.Text == "") || (inputTwo.Text == ""))
{
error.Text = "Please fill both text fields";
}
else if ((inputOne.Text != "") || (inputTwo.Text != ""))
{
switch ((string)button.Tag)
{
case "+":
inputOne.Clear();
inputTwo.Focus();
result = num1 + num2;
break;
case "-":
inputOne.Clear();
num2 = double.Parse(inputOne.Text);
result = num1 + num2;
break;
case "*":
inputOne.Clear();
num2 = double.Parse(inputOne.Text);
result = num1 + num2;
break;
case "/":
inputOne.Clear();
num2 = double.Parse(inputOne.Text);
result = num1 / num2;
break;
case "%":
inputOne.Clear();
num2 = double.Parse(inputOne.Text);
result = num1 % num2;
break;
default:
break;
}
output.Text = result.ToString();
}
}
else
{
Calculation(num1, num2);
output.Text = result.ToString();
}
}
public void Calculation(double number1, double number2)
{
switch (operationPerformed)
{
case "+":
result = number1 + number2;
break;
case "-":
result = number1 - number2;
break;
case "*":
result = number1 * number2;
break;
case "/":
result = number1 / number2;
break;
case "%":
result = number1 % number2;
break;
default:
break;
}
}
public void CalculationNumberpad()
{
}
private void NumberPad_Click(object sender, RoutedEventArgs e)
{
Button button = (Button)sender;
inputOne.Text += button.Content.ToString();
}
private void inputTwo_GotFocus(object sender, RoutedEventArgs e)
{
checkFocusedTextbox = 2;
}
private void inputOne_GotFocus(object sender, RoutedEventArgs e)
{
checkFocusedTextbox = 1;
}
}
}
Button class 成功检索按钮点击并进入 operationPerformed 变量。这已在我的代码顶部声明为字符串,因此我不明白为什么我在使用 ToString() 后会出现错误。然后它进入 num1 double 并给我错误。
我非常需要帮助,我知道这个社区是最好的!如有遗漏请见谅
谢谢,
克里斯
您正在这样做:
double num1 = double.Parse(inputOne.Text);
double num2 = double.Parse(inputTwo.Text);
在检查inputOne 或inputTwo 的内容是否为空之前。如果任一为空或包含无法解析为双精度的字符串,Parse 行将抛出 System.FormatException.
查看 double.TryParse 以检查某些内容是否可解析而不抛出异常。所以像 :
double num1, num2;
if (double.TryParse(inputOne.Text, out num1) && double.TryParse(inputTwo.Text, out num2))
{ ... values are valid, so do things}
else
{ ... at least one value is not valid... warn user }
这些条件是错误的:
(inputOne.Text != "") || (inputTwo.Text != "")
测试字符串是否相等使用str1.Equals(str2);
也与 A || 相反B 是 !A && !B
更好的测试是string.IsNullorEmpty(teststring);
你这样做
inputOne.Clear(); // this makes the TextBox empty
然后这个
num2 = double.Parse(inputOne.Text); // How can you parse an empty text
这里改成
case "-":
num2 = double.Parse(inputOne.Text); // First take the value
inputOne.Clear(); // Then clear
result = num1 + num2; // Then Calculate
break;
.
这里为了对比[=56=]
else if ((inputOne.Text != "") || (inputTwo.Text != ""))
您已经确认两个文本框都已填充,那么这将始终为真,因此只需一个简单的 else 就足够了。
将行替换为
else // that's enough
.
同时从此处的按钮中获取操作员符号
switch ((string)button.Tag)
这不是您需要的 标签。你需要的是按钮
的内容
将其更改为
switch ((string)button.Content.ToString())
.
如何填充 inputTwo 文本框?
Button button = (Button)sender;
inputOne.Text += button.Content.ToString();
这里你只能选择填写inputOne
所以在这里改成
Button button = (Button)sender;
if (checkFocusedTextbox == 1)
inputOne.Text += button.Content.ToString();
else
inputTwo.Text += button.Content.ToString();
我是新来的,也是 C# 的新手,所以请多多关照。我正在为我的编程 class 分配作业,但我终其一生都无法解决问题。该程序是一个计算器,它从两个文本框获取输入并对它们进行操作,并禁用第二个文本框并使用按钮输入数字(数字键盘)。我正在使用 Visual Studio 2013 并多次检查我的代码并逐步完成它。这是我的代码:
static int checkFocusedTextbox = 1;
string operationPerformed;
double result = 0;
private void Operator_Click(object sender, RoutedEventArgs e)
{
// try
// {
Button button = (Button)sender;
operationPerformed = button.Content.ToString();
double num1 = double.Parse(inputOne.Text);
double num2 = double.Parse(inputTwo.Text);
if (checkFocusedTextbox == 1)
{
if ((inputOne.Text == "") || (inputTwo.Text == ""))
{
error.Text = "Please fill both text fields";
}
else if ((inputOne.Text != "") || (inputTwo.Text != ""))
{
switch ((string)button.Tag)
{
case "+":
inputOne.Clear();
inputTwo.Focus();
result = num1 + num2;
break;
case "-":
inputOne.Clear();
num2 = double.Parse(inputOne.Text);
result = num1 + num2;
break;
case "*":
inputOne.Clear();
num2 = double.Parse(inputOne.Text);
result = num1 + num2;
break;
case "/":
inputOne.Clear();
num2 = double.Parse(inputOne.Text);
result = num1 / num2;
break;
case "%":
inputOne.Clear();
num2 = double.Parse(inputOne.Text);
result = num1 % num2;
break;
default:
break;
}
output.Text = result.ToString();
}
}
else
{
Calculation(num1, num2);
output.Text = result.ToString();
}
}
public void Calculation(double number1, double number2)
{
switch (operationPerformed)
{
case "+":
result = number1 + number2;
break;
case "-":
result = number1 - number2;
break;
case "*":
result = number1 * number2;
break;
case "/":
result = number1 / number2;
break;
case "%":
result = number1 % number2;
break;
default:
break;
}
}
public void CalculationNumberpad()
{
}
private void NumberPad_Click(object sender, RoutedEventArgs e)
{
Button button = (Button)sender;
inputOne.Text += button.Content.ToString();
}
private void inputTwo_GotFocus(object sender, RoutedEventArgs e)
{
checkFocusedTextbox = 2;
}
private void inputOne_GotFocus(object sender, RoutedEventArgs e)
{
checkFocusedTextbox = 1;
}
}
}
Button class 成功检索按钮点击并进入 operationPerformed 变量。这已在我的代码顶部声明为字符串,因此我不明白为什么我在使用 ToString() 后会出现错误。然后它进入 num1 double 并给我错误。
我非常需要帮助,我知道这个社区是最好的!如有遗漏请见谅
谢谢, 克里斯
您正在这样做:
double num1 = double.Parse(inputOne.Text);
double num2 = double.Parse(inputTwo.Text);
在检查inputOne 或inputTwo 的内容是否为空之前。如果任一为空或包含无法解析为双精度的字符串,Parse 行将抛出 System.FormatException.
查看 double.TryParse 以检查某些内容是否可解析而不抛出异常。所以像 :
double num1, num2;
if (double.TryParse(inputOne.Text, out num1) && double.TryParse(inputTwo.Text, out num2))
{ ... values are valid, so do things}
else
{ ... at least one value is not valid... warn user }
这些条件是错误的: (inputOne.Text != "") || (inputTwo.Text != "")
测试字符串是否相等使用str1.Equals(str2); 也与 A || 相反B 是 !A && !B
更好的测试是string.IsNullorEmpty(teststring);
你这样做
inputOne.Clear(); // this makes the TextBox empty
然后这个
num2 = double.Parse(inputOne.Text); // How can you parse an empty text
这里改成
case "-":
num2 = double.Parse(inputOne.Text); // First take the value
inputOne.Clear(); // Then clear
result = num1 + num2; // Then Calculate
break;
.
这里为了对比[=56=]
else if ((inputOne.Text != "") || (inputTwo.Text != ""))
您已经确认两个文本框都已填充,那么这将始终为真,因此只需一个简单的 else 就足够了。
将行替换为
else // that's enough
.
同时从此处的按钮中获取操作员符号
switch ((string)button.Tag)
这不是您需要的 标签。你需要的是按钮
的内容将其更改为
switch ((string)button.Content.ToString())
.
如何填充 inputTwo 文本框?
Button button = (Button)sender;
inputOne.Text += button.Content.ToString();
这里你只能选择填写inputOne
所以在这里改成
Button button = (Button)sender;
if (checkFocusedTextbox == 1)
inputOne.Text += button.Content.ToString();
else
inputTwo.Text += button.Content.ToString();