如果是int,java中的计算器显示为double

时间:2014-04-12 18:28:15

标签: java swing

嘿伙计们我正在构建一个java计算器,一切正常,除了我正在用双数进行计算的事实。

问题是,当我想做0.3 + 0.5 = 0.8工作正常,但当我做6 + 6 = 12.0

我怎样才能解决这个问题,所以当结果是.0时,它会显示一个整数?

我的代码是:

public void actionPerformed(ActionEvent e) {
                int j = 0;
                r2 = Double.parseDouble(textField.getText());
                if (option.equals("+")) {
                    result = r1 + r2;
                }
                if (option.equals("-")) {
                    result = r1 - r2;
                }
                if (option.equals("*")) {
                    result = r1 * r2;
                }
                if (option.equals("/")) {
                    result = r1 / r2;
                }
                textField.setText(result + " ");
            }

3 个答案:

答案 0 :(得分:3)

使用DecimalFormat对象(请参阅http://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html上的文档。)

示例:

DecimalFormat df = new DecimalFormat("############.#");
System.out.println(df.format(result));

答案 1 :(得分:2)

您可以检查结果是否为int,如果是,则将其整数值设置为这样的结果。

public void actionPerformed(ActionEvent e) {
            int j = 0;
            r2 = Double.parseDouble(textField.getText());
            if (option.equals("+")) {
                result = r1 + r2;
            }
            if (option.equals("-")) {
                result = r1 - r2;
            }
            if (option.equals("*")) {
                result = r1 * r2;
            }
            if (option.equals("/")) {
                result = r1 / r2;
            }
            if ((result == Math.floor(result )) && !Double.isInfinite(result )) {
                 textField.setText((int)(result) + " ");
            } else textField.setText(result + " ");
        }

答案 2 :(得分:1)

您可以检查result中是否包含整数,如下所示:

if((int) result == result) {
       textField.setText((int)result + " ");
} else {
       textField.setText(result + " ");
}

修改

正如@Hovercraft Full Of Eels所说,你可以更多地考虑决定,什么是整数和什么不是,特别是当result类似于5.99999997并且简单的转换为int将使5从这个数字。

final double epsilon = 1e-6;
if(Math.abs(Math.rint(myVal) - myVal) < epsilon) {
    textField.setText(Math.round(myVal) + "");
} else {
    textField.setText(String.format("%f", myVal));
}