首页 > 趣闻 > 正文内容

Java中如何用取模运算检查数字能否被整除?附代码示例

趣闻2025-05-27 12:53:57

你是不是经常盯着Java代码发愁:这数到底能不能被另一个数整除啊?就像新手想快速涨粉却找不到门路一样,今天咱们就撕开取模运算的神秘面纱!

(敲黑板)先记住这个死亡问答:??取模运算的结果是0就是整除!?? 举个栗子,15除以3余0对吧?那用15%3==0就能判断。但等等,这里头的水可比你想象的深...


??一、取模运算的食用说明书??

  1. 基础吃法:直接套公式
java复制
if(数字 % 除数 == 0){
    System.out.println("妥妥的整除!");
}
  1. 暗黑料理预警:负数怎么破?
    当被除数是-15时,-15%3=0吗?错!结果是0?大错特错!实际是-0,但Java里-0和0是等价的。不过要是除数变负数...(此处应有黑人问号脸)

  2. 必看翻车现场:

java复制
System.out.println(-7 % 3);  //输出-1而不是2!
System.out.println(7 % -3);  //输出1而不是-2!

这俩结果是不是让你怀疑人生?别慌,马上给你解密。


??二、灵魂拷问环节??
问:不是说余数都是正数吗?
答:Java的%运算符可是傲娇小公主,余数符号跟着被除数走。所以-7%3=-1,但7%-3=1!(突然明白为什么数学老师总说余数要非负了吧)

问:那怎么保证判断正确?
答:上绝招!加个绝对值保平安:

java复制
if(Math.abs(数字 % 除数) == 0)

??三、高端玩家必备对比表??

场景常规写法安全写法
正数判断a%b ==0Math.abs(a%b)==0
包含负数可能翻车永远稳如老狗
适用场景确定不会出现负数金融/数学等严谨领域

看到没?这就是为什么你写的分页功能有时候会多出一页空数据的根本原因!


??四、来自实战的暴击案例??
去年我做支付系统,有个新人写了段优惠券发放代码:

java复制
if(total % couponValue == 0){
    sendCoupons();
}

结果用户充值-100元时...(此处省略500字事故报告)最后改成:

java复制
if(couponValue !=0 && Math.abs(total % couponValue) ==0)

才堵住这个漏洞。血的教训啊朋友们!


??五、你以为这样就完了???
现在考考你:2024%4==0是不是判断闰年的正确方式?错!闰年算法应该是:

java复制
(year % 4 ==0 && year %100 !=0) || year%400 ==0

没想到吧?取模运算套娃起来能要人命!


??小编观点??
用%判断整除就像用美颜相机——表面光鲜,暗藏杀机。真正搞开发的都知道要加三重保险:检查除数非零、处理负数、考虑精度问题。下次看到别人写的a%b==0,记得先问句:兄dei,你确定不用加绝对值?

搜索