将double转换为十进制和无穷大错误

时间:2014-09-27 16:10:51

标签: c# visual-studio-2013

当我运行这段代码时,我得到的输入字符串格式不正确吗?

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);
        }

加上当它确实有效时我会得到一个无穷大的答案,因此为什么我尝试了十进制方法,这样我才能得到更准确的答案。

2 个答案:

答案 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."
}

至于无限的出现,我们需要更多地了解输入的数据!