首页 > 解决方案 > 使用 while/do while 打印数字 0, 0.1, 0.2, 0.3, ..., 3

问题描述

我想像这样打印 0 到 3 范围内的数字:

0, 0.1, 0.2, 0.3, ..., 3

但是当我使用这段代码时:

    double i = 0;
    while (i <= 3) {
        System.out.printf("%.1f, ", i);
        i+= 0.1;
    }

或这个:

    double j = 0;
    do {
        System.out.printf("%.1f, ", j);
        j+= 0.1;
    } while (j <= 3);

我明白了

0, 0.1, 0.2, 0.3, ..., 2.9

我做错了什么?

标签: javawhile-loop

解决方案


这是因为双精度。另一种解决方案可能是使用足够精确的数据类型,即 BigDecimal

BigDecimal i = BigDecimal.ZERO;
while (i.compareTo(BigDecimal.valueOf(3)) <= 0) {
    System.out.printf("%.1f, ", i.doubleValue());
    i = i.add(BigDecimal.valueOf(0.1));
}

推荐阅读