java - 使用 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
我做错了什么?
解决方案
这是因为双精度。另一种解决方案可能是使用足够精确的数据类型,即 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));
}
推荐阅读
- string - 字符串操作haskell
- typescript - 如何在 Jetbrain IDE 中使用断点调试 TypeScript?
- javascript - 无法使用 Javascript 连接到 localhost Mosquitto Broker?
- java - 为什么我的公共变量显示为“'this' is not available”?
- swift - 如何在不知道名称的情况下访问 Firestore 字段值?
- php - 如何在使用 oAuth2 的第三方 API 中进行 Laravel 身份验证?
- javascript - Javascript 费用计算
- git - 如何更改git中的用户名?
- lua - 如何检查一个值是否不在 Lua 表中的任何位置?
- go - 我正在使用 Antlr4 创建一种语言,然后我想用它来生成 LLVM IR。我是否需要手写 LLVM IR 来响应我的访客事件?