【问题标题】:JTextField converted to Double returning NaNJTextField 转换为 Double 返回 NaN
【发布时间】:2018-03-11 08:19:35
【问题描述】:

我是新来的,也是编码,我正在做我的课程结束项目,很难找到错误在哪里。 基本上我的代码是:

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 值,我没有找到错误在哪里。 我正在变量中进行从字符串到双精度的转换,但仍然不起作用。谁能给我一盏灯?

干杯

【问题讨论】:

  • 需要更多代码来查找错误
  • 你在文本字段中坑了什么?为什么你的代码指的是磅和英寸,而他用过并且无关紧要?请发布minimal reproducible example - 点击链接了解其含义。
  • kilograms(meters * meters) 等于0.0 时,将产生NaN

标签: java string double jtextfield nan


【解决方案1】:

“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;

【讨论】:

    【解决方案2】:

    谢谢你的回答,我很抱歉没有发布足够多的代码来识别错误,因为我告诉我我是新手,但呵呵

    我的错误是我在另一个部分中插入了变量,因此系统将我的变量识别为“0.00”,所以返回一个 NaN 错误。

    现在已经修复了。

    再次感谢!

    【讨论】:

      【解决方案3】:

      JTextField 转换为 Double 返回 NaN

      演员转换是明确定义的。您不必猜测,只需检查JLS。 (int,float & long) 到 double 是一种扩大转换。

      私人双重结果;

        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 舍入到最近模式。

      干杯

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-03
        • 1970-01-01
        • 1970-01-01
        • 2014-02-11
        • 1970-01-01
        • 2022-12-05
        • 2017-06-09
        相关资源
        最近更新 更多