我有以下代码:
int i = (int) 0.72;
System.out.println(i);
产生以下输出:
0
我会想象变量i
应该具有1
(since 0.72 > 0.5 => 1)的值,为什么不是这样?
(我想当转换为 int 时,它只是在逗号后面去掉十进制数字,不考虑四舍五入;所以我可能不得不自己处理这个问题?)
我有以下代码:
int i = (int) 0.72;
System.out.println(i);
产生以下输出:
0
我会想象变量i
应该具有1
(since 0.72 > 0.5 => 1)的值,为什么不是这样?
(我想当转换为 int 时,它只是在逗号后面去掉十进制数字,不考虑四舍五入;所以我可能不得不自己处理这个问题?)
正确,转换为 int 只会截断数字。您可以执行以下操作来获得您想要的结果:
int i = (int)Math.round(0.72);
System.out.println(i);
例如,这将为 0.72 打印 1,为 0.28 打印 0。
因为当您将 double 转换为 int 时,小数部分会被截断
UPDATEMath.round
将提供您想要的输出,而不是Math.ceil
:
System.out.println(Math.round(0.72));
// will output 1
System.out.println(Math.round(0.20));
// will output 0
您可以使用Math.ceil
:
System.out.println(Math.ceil(0.72));
// will output 1
System.out.println(Math.ceil(0.20));
// will output 1
隐式转换为 int 会丢弃小数部分。这就是你得到 0 的原因,因为 0 之后的任何内容都被删除(在你的情况下是 72)。如果您想四舍五入,请查看Math.round(...)
显式转换将浮点/双精度值转换为 int 变量(丢弃小数部分)
Java 不会像我们那样对数字进行四舍五入。它只是截断小数部分。如果要对数字进行四舍五入,请使用 java.lang.Math
强制转换double
为int
截断数字的非整数部分。
要按照您的描述舍入数字,请使用Math.round()
作为一个完整的 Java 初学者,以防我的经验对某人有用,我只是犯了以下错误:
int x = (int) Math.random() * 10;
...这将始终将 x 设置为 0。相反,我应该完成int x = (int) (Math.random() * 10);
.
没有太多 Java 知识的具体错误,但我会抛出这个,以防任何对此感到困惑的人偶然发现这个问题。