5

我有以下代码:

int i = (int) 0.72;
System.out.println(i);

产生以下输出:

0

我会想象变量i应该具有1 (since 0.72 > 0.5 => 1)的值,为什么不是这样?

(我想当转换为 int 时,它只是在逗号后面去掉十进制数字,不考虑四舍五入;所以我可能不得不自己处理这个问题?)

4

7 回答 7

7

正确,转换为 int 只会截断数字。您可以执行以下操作来获得您想要的结果:

int i = (int)Math.round(0.72);
System.out.println(i);

例如,这将为 0.72 打印 1,为 0.28 打印 0。

于 2012-12-21T09:54:56.370 回答
3

因为当您将 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
于 2012-12-21T09:53:53.567 回答
1

隐式转换为 int 会丢弃小数部分。这就是你得到 0 的原因,因为 0 之后的任何内容都被删除(在你的情况下是 72)。如果您想四舍五入,请查看Math.round(...)

于 2012-12-21T09:54:17.910 回答
1

显式转换将浮点/双精度值转换为 int 变量(丢弃小数部分)

于 2012-12-21T09:55:31.993 回答
1

Java 不会像我们那样对数字进行四舍五入。它只是截断小数部分。如果要对数字进行四舍五入,请使用 java.lang.Math

于 2012-12-21T09:55:33.193 回答
1

强制转换doubleint截断数字的非整数部分。

要按照您的描述舍入数字,请使用Math.round()

于 2012-12-21T09:55:45.643 回答
0

作为一个完整的 Java 初学者,以防我的经验对某人有用,我只是犯了以下错误:

int x = (int) Math.random() * 10;

...这将始终将 x 设置为 0。相反,我应该完成int x = (int) (Math.random() * 10);.

没有太多 Java 知识的具体错误,但我会抛出这个,以防任何对此感到困惑的人偶然发现这个问题。

于 2013-02-20T00:45:01.773 回答