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

Java浮点数精度问题:IntelliJ IDEA中取模结果不符预期

Java float取模结果不符合预期的原因与解决办法

这是浮点数的二进制精度限制导致的问题。float属于单精度浮点数,仅用32位存储,其中尾数部分只有23位,无法精确表示所有十进制小数——比如0.1在二进制中是无限循环的小数,因此存储时只能用近似值代替。

你的示例代码:

float f1;
f1 = 66.1f % 6f;
System.out.println(f1);

这里的66.1f本身就不是精确的66.1,而是一个接近它的近似值。当对6f取模时,这个微小的存储误差被放大,最终得到的结果就不是预期的0.1,而是0.099998474。

解决办法

  • 改用double类型:double是双精度浮点数,64位存储,尾数部分有52位,精度远高于float,误差会显著缩小。
    double d1;
    d1 = 66.1 % 6;
    System.out.println(d1); // 输出0.10000000000000142
    
  • 使用BigDecimal类精确计算:如果需要完全精确的十进制运算,BigDecimal可以避免二进制浮点的精度问题,适合金融等对精度要求高的场景。
    import java.math.BigDecimal;
    
    public class Main {
        public static void main(String[] args) {
            BigDecimal num = new BigDecimal("66.1");
            BigDecimal divisor = new BigDecimal("6");
            BigDecimal remainder = num.remainder(divisor);
            System.out.println(remainder); // 精确输出0.1
        }
    }
    
  • 格式化输出(仅显示层面):如果只是需要让输出看起来是0.1,可以用DecimalFormat格式化结果,但注意实际数值仍是近似值。
    import java.text.DecimalFormat;
    
    public class Main {
        public static void main(String[] args) {
            float f1 = 66.1f % 6f;
            DecimalFormat df = new DecimalFormat("#.0");
            System.out.println(df.format(f1)); // 输出0.1
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 18:21:03