Java int cast返回0
我有以下代码:Java int cast返回0,java,Java,我有以下代码: int i = (int) 0.72; System.out.println(i); 这将产生以下输出: 0 我可以想象变量I的值应该是1(因为0.72>0.5=>1),为什么不是这样呢 (我想,当转换为int时,它只是将逗号后的十进制数字切掉,而不考虑取整;所以我可能必须自己处理这个问题?因为当您将double转换为int时,小数部分会被截断 更新Math.round将给出所需的输出,而不是Math.ceil: System.out.println(Math.round(
int i = (int) 0.72;
System.out.println(i);
这将产生以下输出:
0
我可以想象变量I
的值应该是1
(因为0.72>0.5=>1),为什么不是这样呢
(我想,当转换为int时,它只是将逗号后的十进制数字切掉,而不考虑取整;所以我可能必须自己处理这个问题?因为当您将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
强制转换为int隐式将删除小数部分。这就是为什么会得到0,因为0之后的任何内容都会被删除(在您的例子中是72)。如果您想进行四舍五入,请查看是否正确,将整数转换为整数只会截断数字。您可以这样做以获得您想要的结果:
int i = (int)Math.round(0.72);
System.out.println(i);
例如,这将打印0.72的1和0.28的0。显式转换将浮点/双精度值转换为int变量(这将丢弃小数部分)Java不会像我们一样舍入数字。它只是截断小数部分。
如果要对数字进行四舍五入,请使用java.lang.Math将
double
转换为int
截断数字的非整数部分
要按照您所描述的对数字进行四舍五入,请将作为一个完整的Java初学者,以防我的经验对某人有用,我犯了以下错误:
intx=(int)Math.random()*10代码>
。。。这将始终将x设置为0。相反,我应该做intx=(int)(Math.random()*10)代码>
Java不知道有多少具体的错误,但我会把它扔掉,以防任何对此感到困惑的人偶然发现这个问题。有人需要截断;其他需要舍入。只有一条规则可以应用于缩小转换,这一条规则是截断。您想要使用的是Math.round()
这篇文章可以帮助您这里要提到的是,ceil
将始终向上舍入,而不仅仅是当=.5