【问题标题】:Rounding during a specific situation在特定情况下四舍五入
【发布时间】: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));


            }
        });

【问题讨论】:

标签: java formatting double rounding decimalformat


【解决方案1】:

这可能是因为Double 数字的编码。 要解决这个问题,您可以使用 BigDecimal 类(如here

【讨论】:

  • 我加在一起的数字不是很大(1.1 和 2.2)你能解释一下为什么需要这样做吗?
  • 浮点数和双精度数以特定方式存储。您可以发现更多here 请注意,BigDecimal 不仅用于我们认为的 数字,还用于 精确 数字
  • 叹息。如果计算机是摩托车,那么执照考试将有几个关于浮点数如何工作的问题。它们是近似值。
  • BigDecimal 是在这里敲钉子的大锤。也许只需根据需要格式化字符串表示形式就足够了,而不是以完美的精度执行计算。只有 OP 肯定知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多