我正在使用Android计算器。用户按下1到9和小数点的按钮,然后inputnum(arraylist)将解析显示为输入,然后运行并显示答案。相关代码如下:

ArrayList<Double> inputnum = new ArrayList<Double>();
double inputnum1;
double inputnum2;

...


inputnum.add(Double.parseDouble(Fakedisplay.getText().toString()));
case SUBTRACT:
        inputnum1 = inputnum.get(0);
        inputnum2 = inputnum.get(1);
        inputnum.removeAll(inputnum);
        inputnum.add(inputnum1 - inputnum2);

        Fakedisplay.setText(String.format("%.19f", inputnum.get(0)));

        String strf2=Fakedisplay.getText().toString();
        String strippedf2 = Double.valueOf(strf2).toString();
        if (strippedf2.endsWith(".0"))
            strippedf2 = strippedf2.substring(0, strippedf2.length() - 2);
        Fakedisplay.setText(strippedf2);


问题:
对于1000.84-1000.01,它将给出0.830000000000041,这对于演示文稿来说是不需要的,
然而,这个问题仅发生在减法上,加,乘,除的编码完全相同,但效果很好,例如:1000.84+ 1000.01代表2000.85,不多于1000.84 * 1000.01 = 1000850.0084且不多于1000.84 / 1000.01也起作用,正确呈现。

为什么减法如此特别?怎么处理呢?

最佳答案

尝试使用十进制格式来显示最长为N十进制数​​字的值。

DecimalFormat round = new DecimalFormat ("###.##");
String output = round.format(inputnum.get(0));
Fakedisplay.setText(output);


0.830000000000041的输出= 0.83

10-05 17:49