You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中Double转Int显式类型转换的舍入规则疑问

为什么double转int时部分高精度小数会出现异常取整?

这本质是IEEE 754双精度浮点数的精度限制导致的,Java的double类型遵循该标准,仅能提供53位有效二进制精度,对应约15-17位十进制有效数字。超出这个范围的十进制字面量,会被自动舍入到最接近的可表示double值,而非精确存储。

逐个分析你代码里的变量:

  • double a = 5.9999999999999999:这个字面量的十进制位数超过了53位精度的极限,实际存储时会被舍入到6.0,所以用(int)强制转换时自然得到6。
  • double b = 5.999999999999999:这个数刚好在53位精度的可表示范围内,实际存储值是略小于6.0的,(int)转换会直接截断小数部分,因此得到5。
  • double a1 = 5.8888888888888888:虽然是16位精度,但它的舍入结果是小于6.0的最接近double值,截断后得到5。
  • double c = 5.11111111111111111111...:无论后面追加多少位,舍入后的double值始终小于6.0,截断小数部分后结果为5。

注意:Java中(int)强制转换的逻辑是直接丢弃小数部分,并非四舍五入。最终结果由变量实际存储的double值决定,而非你编写的十进制字面量。

内容的提问来源于stack exchange,提问作者Evloution78

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 20:37:47