【发布时间】:2017-08-22 16:09:41
【问题描述】:
我无法理解为什么以下两个应该有任何区别:
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
【问题讨论】:
-
因为
100是int而.01不是。 -
除以 100 是整数运算,所以结果是
int,乘以 0.01 是浮点运算,结果是double。注意:这两个选项都不是特别有用。我建议做Math.floor(d * 100) / 100.0,它不太可能溢出,并且表示错误更少。