Java中如何用取模运算检查数字能否被整除?附代码示例
趣闻2025-05-27 12:53:57
你是不是经常盯着Java代码发愁:这数到底能不能被另一个数整除啊?就像新手想快速涨粉却找不到门路一样,今天咱们就撕开取模运算的神秘面纱!
(敲黑板)先记住这个死亡问答:??取模运算的结果是0就是整除!?? 举个栗子,15除以3余0对吧?那用15%3==0就能判断。但等等,这里头的水可比你想象的深...
??一、取模运算的食用说明书??
- 基础吃法:直接套公式
java复制if(数字 % 除数 == 0){ System.out.println("妥妥的整除!"); }
-
暗黑料理预警:负数怎么破?
当被除数是-15时,-15%3=0吗?错!结果是0?大错特错!实际是-0,但Java里-0和0是等价的。不过要是除数变负数...(此处应有黑人问号脸) -
必看翻车现场:
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 ==0 | Math.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,你确定不用加绝对值?