我是新来的,也是编码,我正在做我的课程结论项目,并且很难找到错误的位置。 基本上我的代码是:
kilograms = Double.parseDouble(kgTextField.getText());
meters = Double.parseDouble(metersTextField.getText());
pounds = Double.parseDouble(poundsTextField.getText());
inches = Double.parseDouble(inchesTextField.getText());
result = (kilograms) / (meters * meters);
resultTextField.setText(String.format("%,.2f", result ));
结果是给我一个NaN值,我找不到错误在哪里。 我在变量中从字符串转换为double但仍然无法正常工作。有人能给我一个亮点吗?
干杯
答案 0 :(得分:0)
“NaN”代表“不是数字”。如果是浮点则生成它 操作有一些输入参数导致操作 产生一些不确定的结果。例如,0.0除以0.0即 算术上未定义。取负数的平方根 也是未定义的。
在您的情况下,您必须检查从文本字段中获取的值是否有效并相应地处理无效值。
离。米必须是!= 0
下面的代码块取自java.lang.Double,并说明了将double值除以0.0的可能结果
/**
* A constant holding the positive infinity of type
* {@code double}. It is equal to the value returned by
* {@code Double.longBitsToDouble(0x7ff0000000000000L)}.
*/
public static final double POSITIVE_INFINITY = 1.0 / 0.0;
/**
* A constant holding the negative infinity of type
* {@code double}. It is equal to the value returned by
* {@code Double.longBitsToDouble(0xfff0000000000000L)}.
*/
public static final double NEGATIVE_INFINITY = -1.0 / 0.0;
/**
* A constant holding a Not-a-Number (NaN) value of type
* {@code double}. It is equivalent to the value returned by
* {@code Double.longBitsToDouble(0x7ff8000000000000L)}.
*/
public static final double NaN = 0.0d / 0.0;
答案 1 :(得分:0)
我的错误是我将变量插入另一个部分,因此系统将我的变量识别为“0.00”,因此返回给我一个NaN错误。
现在已经修好了。
再次感谢!
答案 2 :(得分:0)
JTextField转换为Double返回NaN
Cast转换定义明确。您不必猜测,只需查看JLS即可。 (int,float& long)加倍是一个扩大的转换。
私人双重结果;
private double result;
private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
double kilograms = 0.0;
double meters = 0.0;
if (meters > 0) {
result = (kilograms) / (meters * meters);
} else {
result = 0.0; //As you wish to store except NaN
}
jTextField1.setText("" + result);
}
将int或long值转换为float,或将long值转换为double,可能会导致精度损失 - 也就是说,结果可能会丢失该值的一些最低有效位。在这种情况下,使用IEEE 754舍入到最接近模式,得到的浮点值将是整数值的正确舍入版本。
干杯