Android计算器减法

时间:2012-09-07 10:48:24

标签: android double calculator

我正在研究一个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也有效正确地呈现。

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

3 个答案:

答案 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);
    }
});