Java int cast返回0

时间:2012-12-21 09:52:30

标签: java

我有以下代码:

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

产生以下输出:

0

我想象变量i的值应为1 (因为0.72> 0.5 => 1),为什么不是这种情况?

(我想,当转换为int时,它只是在逗号之后删除小数位,而不考虑舍入;所以我可能必须自己处理它?)

7 个答案:

答案 0 :(得分:7)

正确,强制转换为int只会截断数字。你可以做这样的事情来得到你想要的结果:

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

这将打印1表示0.72和0表示0.28例如。

答案 1 :(得分:3)

因为当你将double转换为int时,小数部分会被截断

更新Math.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

答案 2 :(得分:1)

转换为int implicity会丢弃小数部分。这就是为什么你得到0,因为0之后的任何东西都被删除了(在你的情况下是72)。如果你想要四舍五入,请查看Math.round(...)

答案 3 :(得分:1)

显式转换将float / double值转换为int变量(丢弃小数部分)

答案 4 :(得分:1)

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

答案 5 :(得分:1)

double转换为int会截断该数字的非整数部分。

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

答案 6 :(得分:0)

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

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

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

没有多大的Java专有技术错误,但我会抛出这个,万一有人因为这个问题而感到困惑。