我无法理解为什么以下两个应该有任何区别:
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
答案 0 :(得分:2)
在第二种情况下,您将整数除以整数,因此结果为整数,而在第一种情况下,您乘以0.1,因此转换为浮点数。
答案 1 :(得分:1)
d = .01 *((int)(d * 100));
d * 100
- >仍然是double
- 25124.53
(int) ...
- >现在int
向下舍入 - 25124
.01 * ( ...
- >现在是float
- 251.24
d =
- 现在再次加倍 - 251.24
d =((int)(d * 100))/ 100;
d * 100
- >仍然是double
- 25124.53
(int) ...
- >现在是int
- 25124
... ) / 100
- >仍是int
- 251
<< ---这就是原因!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是int
,100
也是25124 / 100 = 251
。因此,会发生整数除法,在忽略小数部分后返回值。所以你得到了
double
并且该值存储为251.0
,最终变为
.append()
答案 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