用Java中的Float / Double乘以整数

时间:2015-07-11 00:40:01

标签: java

我试图做一些如此简单的事情:用float / double乘以整数:

private final static int a = 100;
...
double d = 0.5; // Although this is like dividing by 2, it could be any decimal.
int x = (int) (a * d);

但是,虽然您希望这返回x = 50,而不是x = 100!当我使用float d = 0.5f时会发生同样的事情。有谁知道发生了什么以及为什么这不起作用?

2 个答案:

答案 0 :(得分:10)

JLS §4.2.4. Floating-Point Operations告诉管理浮点运算的规则,因此如果任何操作数是浮点数,那么其他操作数将被加宽到浮点(如果还没有),最终结果将是浮点数。

因此,在算术运算之前,您的int 100将扩展为100.0,您的操作结果将为50.0

现在,由于您将结果投射到int,因此JSL §5.1.3. Narrowing Primitive Conversion将适用,并且双50.0将缩小为int 50

根据您提供的代码,

100是不可能的结果。

我的猜测是,当你得到100分时,你会做其他事情。

enter image description here

答案 1 :(得分:3)

int x =  (int) 0.5 * 100; 

它首先将0.5转换为int ---> 0,然后相乘。