私はアンドロイド計算機に取り組んでいます。ユーザーが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も機能し、正しく表示されます。
なぜそれは減算のためにそれほど特別なのですか?それをどのように扱うのですか?