java - HALF_EVEN 舍入不起作用

标签 java rounding decimalformat

我已经阅读了几篇关于使用十进制格式和舍入的文章,我认为我使用的是正确的,但不知何故 HALF_EVEN、HALF_DOWN 或 HALF_UP 舍入不起作用。 如果它与 eclipse 设置有关,或者我真的错误地使用了 decimalformat,您有什么想法吗?

我的目标是像标准数学舍入那样将每个数字从 0.55 舍入到 0.6。所以...正如我所假设的...最好的选择是使用“HALF_UP”四舍五入。

代码:

import java.math.RoundingMode;
import java.text.DecimalFormat;

public class Rounding {

    public static void main(String[] args) {
        DecimalFormat df = new DecimalFormat();
        df.setMinimumFractionDigits(1);
        df.setMaximumFractionDigits(1);
        df.setRoundingMode(RoundingMode.HALF_UP);


        for (double x = 0.55; x < 10.0; x++) {
            System.out.println("Original value: " + x + "\tRounded value: " + df.format(x));
        }
    }
}

结果:

Original value: 0.55    Rounded value: 0,6
Original value: 1.55    Rounded value: 1,6
Original value: 2.55    Rounded value: 2,5
Original value: 3.55    Rounded value: 3,5
Original value: 4.55    Rounded value: 4,5
Original value: 5.55    Rounded value: 5,5
Original value: 6.55    Rounded value: 6,5
Original value: 7.55    Rounded value: 7,5
Original value: 8.55    Rounded value: 8,6
Original value: 9.55    Rounded value: 9,6

最佳答案

一旦您拥有 double 格式的数字,您就已经创建了隐藏的不准确性,它可以在您看不到的情况下将数字舍入到低于或高于中间标记的位置。

您需要使用 BigDecimal。

关于java - HALF_EVEN 舍入不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40061016/

相关文章:

java - 将 jar 文件添加到类路径

java - Round Double 值和指数表示法 (java)

java - 使用 Robolectric 测试 Android DecimalFormat

android - BigDecimal 在带有本地化的 Android 4.0.3 中给出 NumberFormatException

java - java 8 和 java 12 之间的不同格式

java - Spring 3 和 org.springframework.messaging

java - 为什么我的 Java 类在编译时会创建多个 .class 文件?

java - 载入失败 Glide

C#:如何将整数四舍五入到最接近的 1000

c++ - double 的 printf 舍入行为