Java中如何将浮点数11.885向下取整至两位小数?
问题解决:double类型向下取整到两位小数的正确实现
你遇到的问题根源在于double类型的精度限制:十进制的11.885无法用二进制浮点数精确存储,实际在内存中它的存储值略大于11.885(近似为11.885000000000001)。当你执行x * 100.0时,得到的是1188.5000000000001,Math.round会将这个值四舍五入为1189,最终结果自然是11.89。
不需要导入任何包的情况下,可以通过以下代码实现向下取整到两位小数:
double x = 11.885; double y = Math.floor(x * 100.0 - 1e-10) / 100.0;
代码说明:
- 先将
x乘以100,把目标小数位转化为整数位 - 减去一个极小的数值
1e-10(十亿分之一),抵消double存储时的微小误差,确保原本的11.885对应的实际值被调整到略小于1188.5 - 用
Math.floor对调整后的值向下取整,得到1188 - 最后除以100,还原到两位小数的格式,结果就是11.88
内容的提问来源于stack exchange,提问作者Nevzat
相关产品推荐
相关产品推荐

