JTextField转换为Double返回NaN

时间:2017-09-29 12:14:08

标签: java string double jtextfield nan

我是新来的,也是编码,我正在做我的课程结论项目,并且很难找到错误的位置。 基本上我的代码是:

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但仍然无法正常工作。有人能给我一个亮点吗?

干杯

3 个答案:

答案 0 :(得分:0)

  

“NaN”代表“不是数字”。如果是浮点则生成它   操作有一些输入参数导致操作   产生一些不确定的结果。例如,0.0除以0.0即   算术上未定义。取负数的平方根   也是未定义的。

引自this question

在您的情况下,您必须检查从文本字段中获取的值是否有效并相应地处理无效值。

离。米必须是!= 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舍入到最接近模式,得到的浮点值将是整数值的正确舍入版本。

干杯