【发布时间】:2017-05-28 18:13:03
【问题描述】:
当我将三个双精度加在一起时,我正在尝试创建一个计算器应用程序。 (1.1 + 1.1 + 1.1) 3.3000000000000003 返回。仅当三个数字相加 (1.1 + 1.1) 返回 2.2 时才会发生这种情况
他们是不是只有在连续 2 位数字为零时才使用十进制格式进行舍入以防止这种情况发生?
谢谢!
如果您需要查看我的更多代码,请告诉我,我认为这就足够了,尽管我可能错了。
等于按钮方法
equals_button_IB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//new value being added everytime addition button is pressed, last number to be added will not have addition button
//pressed after it, so this adds the last value to the values array list
values.add(current_screen_value);
System.out.println(values);
double sum = 0;
for(int i = 0; i<values.size(); i++){
sum+= Double.parseDouble(values.get(i));
}
System.out.println(sum);
clearScreen(null);
updateScreen(String.valueOf(sum));
}
});
【问题讨论】:
-
Is floating point math broken? 的可能重复项 我建议将此作为重复项,因为您似乎需要通过学习浮点近似来开始解决此问题。
-
至于为什么会这样,你可能想看看这个帖子:Floating point inaccuracy examples
-
@O.Jones 这个问题与我的类似,但答案只提供了解释,而不是解决方案
-
@vega8 我正在寻找解决方案,而不仅仅是解释我更新了我的问题以反映这一点。我正在寻找一种在特定情况下四舍五入的方法,例如当连续 2 位数字为 0 时。
-
解释允许您创建自己的解决方案,@Lontronix,一个很好的是docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html。另一个适合您的解决方案的好方法是普通的 Java 文档:docs.oracle.com/javase/8/docs/api/java/text/NumberFormat.html 和相关、docs.oracle.com/javase/8/docs/api/java/lang/… 和重载、docs.oracle.com/javase/8/docs/api/java/util/Formatter.html 阅读精美手册总是很好的。
标签: java formatting double rounding decimalformat