我正在研究一个Android计算器。用户按下1到9和小数点的按钮,然后inputnum(arraylist)然后将显示解析为输入,然后oepration然后显示答案。相关代码如下:
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也有效正确地呈现。
为什么减法如此特别?如何处理?
答案 0 :(得分:1)
正在通过二进制计算执行数学计算。使用二进制文件可以准确表示少于1的数字,这就是为什么您收到奇怪的结果 - 它们是最好的解释表示。
如果你想避免这个问题,我建议使用十进制而不是双精度(十进制用基数为10而不是基数为2)。另一种方法是使用Math.Round来获得更准确的计算。另一个建议(但可能是最不精确的)是将结果显示为字符串,然后在第二个小数位后截断所有值。
答案 1 :(得分:1)
尝试使用十进制格式将长值显示为N个十进制数字。
DecimalFormat round = new DecimalFormat ("###.##");
String output = round.format(inputnum.get(0));
Fakedisplay.setText(output);
输出= 0.83表示0.830000000000041
答案 2 :(得分:0)
试试这个:http://www.hackpundit.com/android-tutorial-simple-calculator-app/
buttonSub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mValueOne = Float.parseFloat(edt1.getText() + "");
mSubtract = true ;
edt1.setText(null);
}
});