android - 如何修复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”。对于更大的数字,差异甚至更大。
如何解决这个问题?
这是我的第一个问题之一,如果它没有任何意义或者是一个愚蠢的问题,请见谅!
解决方案
我们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
你可以用这个
推荐阅读
- node.js - RequestBody.file 没有收到任何文件
- java - Google foo bar 挑战 3 级 - 世界末日燃料
- php - 如何设置选定的填充选择选项
- python - 如何将上传的图像保存到 Django 中的模型?除图像字段外的所有字段都保存到模型
- css - 为什么 SVG 蒙版不适用于 CSS 剪辑路径?
- css - 为什么在 Django 项目中本地没有加载 Bootstrap 4?
- ruby-on-rails - 从 Dockerfile 安装本地 gem 不起作用
- firebase - 无法将现有集合从 firebase 导入 BigQuery
- javascript - 如何在 Angulas JS 中创建按钮并在 HTML 页面中使用 ng-repeat 显示它们
- python - 如何在张量流中预测上传的图像时解释expand_dims