转换为int操作顺序

时间:2017-08-22 16:09:41

标签: java casting int double

我无法理解为什么以下两个应该有任何区别:

double d = 251.2453;
System.out.println(d);
d = .01 * ((int) (d * 100));
System.out.println(d);

输出

  

251.2453
  251.24

对比以下输出除以100而不是在演员阵容前乘以.01:

double d = 251.2453;
System.out.println(d);
d = ((int) (d * 100)) / 100;
System.out.println(d);

输出

  

251.2453
  251.0

4 个答案:

答案 0 :(得分:2)

在第二种情况下,您将整数除以整数,因此结果为整数,而在第一种情况下,您乘以0.1,因此转换为浮点数。

答案 1 :(得分:1)

  

d = .01 *((int)(d * 100));

  1. d * 100 - >仍然是double - 25124.53
  2. (int) ... - >现在int向下舍入 - 25124
  3. .01 * ( ... - >现在是float - 251.24
  4. d = - 现在再次加倍 - 251.24
  5.   

    d =((int)(d * 100))/ 100;

    1. d * 100 - >仍然是double - 25124.53
    2. (int) ... - >现在是int - 25124
    3. ... ) / 100 - >仍是int - 251<< ---这就是原因!
    4. d = - 现在再次加倍 - 251.0

答案 2 :(得分:1)

在第一个代码中,请注意

(d * 100)

括在括号内。因此,首先执行此操作,返回的值为

251.2453 * 100 = 25124.53

然后返回25124.53的(int),即25124 现在,你得到了

.01 * 25124 = 251.24

<小时/> 在第二种情况下,d * 100再次括在括号内,因此首先完成操作,然后返回该结果的(int),即:

(int) 25124.53 = 25124

现在,25124是int100也是25124 / 100 = 251 。因此,会发生整数除法,在忽略小数部分后返回值。所以你得到了

double

并且该值存储为251.0 ,最终变为

.append()

Q.E.D。

答案 3 :(得分:1)

第一种情况是

d = .01 * ((int) (d * 100));

实际上是

.01* 25124 = 251.24

在第二个场景中

d = ((int) (d * 100)) / 100;

实际上是

d= ((int) 25124.53)/100 = 25124/100 = 251
(it's division of int by int equal to int)

现在当你打印d时它的输出为251.0