首页 > 解决方案 > 如何修复android中的“大计算错误”?

问题描述

我正在开发一个可以完美运行的计算器应用程序,但如果输出大于 15 位数字,则会开始给出错误的计算。以下是示例代码

private double result = 0;
edittext1 = (EditText) findViewById(R.id.edittext1);
edittext2 = (EditText) findViewById(R.id.edittext2);
button1 = (Button) findViewById(R.id.button1)
textview1 = (TextView) findViewById(R.id.textview1);
ArrayList<String> nums = new ArrayList<>();
ArrayList<String> signs = new ArrayList<>();

button1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View _view) {
        //This part is essential (adding strings to arraylists)
        nums.add(edittext1.getText().toString());
        nums.add(edittext2.getText().toString());
        signs.add("*");
        if (signs.contains("*")) {
            result = Double.parseDouble(nums.get((int)(0))) * Double.parseDouble(nums.get((int)(1)));
            //error here (perhaps)
            textview1.setText(new DecimalFormat(#.##).format(result));
        }
    }
});

现在,如果我在edittext1中输入“9999999999999999”,在edittext2中输入“1”,则textview1(结果TextView)显示“10000000000000000”。对于更大的数字,差异甚至更大。

如何解决这个问题?

这是我的第一个问题之一,如果它没有任何意义或者是一个愚蠢的问题,请见谅!

标签: androidarraylistnumbersdoublecalculator

解决方案


我们BigDecimal用于高精度算术。我们还使用它来calculations要求控制规模和四舍五入行为

        double number1 = 0.05;
        double number2 = 0.06;
        double result = b - a;
result  = 0.009999999999999998

        BigDecimal number1 = new BigDecimal("0.05");
        BigDecimal number2 = new BigDecimal("0.06");
        BigDecimal result  = number2.subtract(number1);
result  = 0.01

你可以用这个


推荐阅读