我尝试运行以下代码:
double f = 4.35;
int n = (int) (100 * f);
n
将为 434
。为什么?
最佳答案
4.35 不能精确地表示为 float ,因为 .35 不是 2 的(负)幂。因此,会以某种方式进行一些舍入。乘以 100 时也可能会进行舍入。如果结果数字略小于 435,则转换为 int 将取底,即 434。
如果您想四舍五入到最接近的整数,您可以将结果加 0.5,然后转换为 int。这是舍入数字的最通用方法,尽管 Java 有一个内置的舍入实现。
double f = 4.35;
int n = (int) (100 * f + 0.5);
关于java - 精度损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13111212/