【问题标题】:Calculator - setText(String) doesn't work with Doubles计算器 - setText(String) 不适用于双打
【发布时间】:2017-05-23 19:54:50
【问题描述】:

所以我正在尝试制作一个计算器,我正在使用 JFrame 代码并尝试使用内置的 Math 来查找数字的平方根。下面的代码是我遇到问题的地方。 “display.setText(Math.sqrt(Double.parseDouble(display.getText())));”

给我错误“JTextComponent 类型中的方法 setText(String) 不适用于参数 (double)”

    sqrt = new JButton("SQRT");
    sqrt.setBounds(298, 141, 65, 65);
    sqrt.setBackground(Color.BLACK);
    sqrt.setForeground(Color.BLACK);
    sqrt.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            setTempFirst(Double.parseDouble(display.getText()));
            display.setText(Math.sqrt(Double.parseDouble(display.getText())));
            operation[5] = true;

        }
    });
    add(sqrt);

【问题讨论】:

标签: java string jframe value-of


【解决方案1】:

由于 Math.sqrt 返回一个你不能做的双精度:

display.setText(Math.sqrt(Double.parseDouble(display.getText())));

相反,您可以使用该方法返回的值并使用 String.valueOf() 之类的:

display.setText(String.valueOf(Math.sqrt(....

【讨论】:

    【解决方案2】:

    正如你所说,这个方法期待的是字符串而不是双精度,所以你应该转换结果

    Math.sqrt(Double.parseDouble(display.getText()))

    加倍,例如:

    String.valueOf(Math.sqrt(Double.parseDouble(display.getText())))

    Math.sqrt(Double.parseDouble(display.getText()))+""

    更好的方法是将此结果格式化为一些小数位,例如:

    String.format( "%.2f", YOUR_NUMBER ).

    【讨论】:

      【解决方案3】:
      display.setText(Math.sqrt(Double.parseDouble(display.getText())));
      

      应该是

      display.setText(Math.sqrt(Double.parseDouble(display.getText())).toString());
      

      因为您需要 sqrt 的字符串表示形式。 setText() 不能取Double

      【讨论】:

      • Math.sqrt 返回原语,所以它没有 toString 方法,无论如何我认为这是不好的做法,考虑到替代品
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多