当我运行这段代码时,我得到的输入字符串格式不正确吗?
private void button8_Click(object sender, EventArgs e)
{
tb4 = Convert.ToDouble(textBox2.Text);
tb5 = Convert.ToDouble(textBox3.Text);
double ans2 = tb2 / tb3;
decimal ans3 = Convert.ToDecimal(tb2/tb3);
label8.Text = Convert.ToString(ans3);
}
加上当它确实有效时我会得到一个无穷大的答案,因此为什么我尝试了十进制方法,这样我才能得到更准确的答案。
答案 0 :(得分:1)
您有两行输入字符串转换。
tb4 = Convert.ToDouble(textBox2.Text);
tb5 = Convert.ToDouble(textBox3.Text);
这类问题的最佳选择是使用调试器逐步执行代码,这就是它的用途。如果使用Visual Studio,请在方法的第一行设置断点,然后使用F5开始调试。
最好在每次转换时放置单独的try / catch块(除非您不需要在错误消息中向用户提供该级别的详细信息)或使用Double.TryParse()而不是转换,并检查每个TryParse()调用的结果。
加上当它确实有效时我会得到一个无穷大的答案,因此为什么我尝试了十进制方法,这样我才能得到更准确的答案。
如果在分割之前将各个操作数转换为十进制,您将获得更准确的结果。
decimal ans3 = (decimal)tb2/(decimal)tb3;
答案 1 :(得分:1)
通常情况下,输入字符串不会被注册为正确的格式(例如,当用户输入" Orange"进入textBox2时 - 根本无法将其转换为数)。因此,使用TryParse等测试方法通常更好,而不是允许可能引发异常的代码。
这方面的一个例子:
double tb4, tb5;
if(double.TryParse(textBox2.Text, out tb4) && double.TryParse(textBox3.Text, out tb5))
{
// Do math here, since tb4 and tb5 are valid
}
else
{
// Well, something went wrong...
label8.Text = "Could not parse values."
}
至于无限的出现,我们需要更多地了解输入的数据!