0

我有一个非常简单的小程序来求解二次方程,主要它可以工作,但由于某种原因它不会计算平方根。我只是收到一条错误消息,NaN但我看不出它不是数字吗?

int a = Convert.ToInt16(txta.Text);
int b = Convert.ToInt16(txtb.Text);
int c = Convert.ToInt16(txtc.Text);          

listBox1.Items.Add(Convert.ToString(Math.Sqrt(((b * b) - (4 * a * c)))));
4

2 回答 2

3

转换不是原因,因为如果它们没有正确转换或发生溢出,您将分别得到 aFormatExceptionOverflowException。尽管如此,由于您正在做数学,您可能希望转换为双精度类型。

double a = Convert.ToDouble(txta.Text);
double b = Convert.ToDouble(txtb.Text);
double c = Convert.ToDouble(txtc.Text);

我相信你的表达:(b * b) - (4 * a * c)是问题。如果它评估为负数,则将产生NaN结果。

有关详细信息,请参阅MSDN 上的 Math.Sqrt 方法

于 2013-11-10T18:34:39.523 回答
0

它很可能得到一个负数。将其转换为双精度而不是 Int16 可能会有所帮助,因为 Int16 每次都会舍入。

于 2013-11-10T18:34:01.560 回答