Java除法运算防崩溃指南:零值异常处理
锛堢獊鐒跺€掑惛涓€鍙e喎姘旓級鍝庡摕鎴戝幓锛佸垰鍐欏畬鐨凧ava绋嬪簭鍙堝穿浜嗭紵鎺у埗鍙扮孩褰ゅ饯鐨凙rithmeticException鏄笉鏄湅寰椾綘鎯崇牳鐢佃剳锛熷埆鎱岋紝浠婂ぉ鍜变滑灏卞敔鏄庣櫧杩欎釜鈥?strong>鈥嬮櫎浠ラ浂鐨勫潙鈥?/strong>鈥嬶紝淇濆噯璁╀綘鐨勭▼搴忕ǔ濡傝€佺嫍锛?/p>
涓€銆乮f鍒ゆ柇锛氭渶鍘熷浣嗘湁鏁堢殑鐩剧墝 馃洝锔?/h2>
鈥?strong>鈥嬬湅涓溅绁哥幇鍦衡€?/strong>鈥嬶細鏂颁汉灏忔潕鍐欑殑璁$畻鍣ˋPP锛岀敤鎴疯緭鍏?/0鐩存帴闂€€锛佹纭Э鍔垮簲璇ユ槸锛?/p>
java澶嶅埗if(divisor != 0){ result = dividend / divisor; }else{ System.out.println("澶у摜锛屽埆鎷块浂褰撻櫎鏁板晩锛?); }
鈥?strong>鈥嬮噸鐐规潵浜嗏€?/strong>鈥嬶細杩欎釜鍒ゆ柇蹇呴』鍐欏湪闄ゆ硶鎿嶄綔涔嬪墠锛屽氨鍍忕倰鑿滃墠寰楀厛鐪嬮攨閲屾湁娌℃湁娌广€傛湁涓殣钘忓潙鈥斺€斿綋闄ゆ暟鏄诞鐐规暟0.0鏃讹紝杩欎釜鍒ゆ柇浼氬け鏁堬紒寰楀啓鎴?code>Math.abs(divisor) > 1e-10鎵嶇ǔ濡ャ€?/p>
锛堟尃澶达級绛夌瓑锛屽垽鏂啓鍦ㄥ墠绔繕鏄悗绔紵琛€娉暀璁憡璇変綘锛氬繀椤讳袱杈归兘鍋氾紒鍘诲勾鏈変釜鐢靛晢骞冲彴鍦ㄥ墠绔仛浜嗗垽鏂紝缁撴灉琚汉鐢≒ostman鐩存帴璋冩帴鍙d紶0锛岀洿鎺ユ崯澶变笁涓囧璁㈠崟...
浜屻€乼ry-catch锛氱粰绋嬪簭绌块槻寮硅。 馃
閫傚悎澶勭悊涓嶅彲棰勭煡鐨勫満鏅紝姣斿浠庢暟鎹簱璇诲彇鐨勯櫎鏁板彲鑳戒负null锛?/p>
java澶嶅埗try{ BigDecimal result = dividend.divide(divisor); }catch(ArithmeticException e){ logger.error("鎶撳埌涓劊澶撮潚锛?+e.getMessage()); // 杩斿洖榛樿鍊兼垨鎻愰啋鐢ㄦ埛 }
鈥?strong>鈥嬫敞鎰忊€?/strong>鈥嬶細catch鍧楄鍚屾椂鎹曡幏ArithmeticException鍜孨ullPointerException锛屽氨鍍忔姄楸煎緱甯︿袱绉嶇綉銆傛湁涓喎鐭ヨ瘑鈥斺€擝igDecimal鐨刣ivide鏂规硶鍦ㄩ櫎涓嶅敖鏃跺繀椤绘寚瀹氳垗鍏ユā寮忥紝鍚﹀垯鐓ф牱鎶涘紓甯革紒
涓夈€丱ptional绫伙細Java8鐨勯槻鏆寸浘鐗?馃洝锔?/h2>
杩欑鍐欐硶鑳借浠g爜鏇翠紭闆咃細
java澶嶅埗Optional.ofNullable(divisor) .filter(d -> !d.equals(BigDecimal.ZERO)) .map(d -> dividend.divide(d,2,RoundingMode.HALF_UP)) .orElse(BigDecimal.ZERO);
鈥?strong>鈥嬩紭鐐光€?/strong>鈥嬶細閾惧紡璋冪敤鍍忕硸钁姦涓€鏍烽『婧滐紝鈥?strong>鈥嬬己鐐光€?/strong>鈥嬶細鏂版墜瀹规槗鐪嬩笉鎳傘€傝鐧戒簡杩欏氨鏄釜楂樼骇鐗堢殑if鍒ゆ柇锛屽簳灞傝繕鏄仛浜嗛潪绌烘鏌ュ拰闆跺€兼牎楠屻€?/p>
锛堟媿澶ц吙锛夎繕璁板緱2017骞撮偅涓渿鎯婄紪绋嬪湀鐨?闄ら浂鎯ㄦ"鍚楋紵鏌愰摱琛岀郴缁熷洜涓烘紡浜嗕竴涓浂鍊煎垽鏂紝瀵艰嚧ATM鏈虹柉鐙傚悙閽?..鎵€浠ヨ闃插尽鎬х紪绋嬬湡鑳芥晳鍛斤紒
鍥涖€佽嚜瀹氫箟宸ュ叿绫伙細涓€鍔虫案閫哥殑缁堟瀬鏂规 鈿欙笍
鏁翠釜鍏徃閮界敤寰椾笂鐨勮В鍐虫柟妗堬細
java澶嶅埗public class SafeMath { public static BigDecimal divide(BigDecimal a, BigDecimal b) { if(b.compareTo(BigDecimal.ZERO) == 0){ return a.compareTo(BigDecimal.ZERO) > 0 ? BigDecimal.valueOf(Double.MAX_VALUE) : BigDecimal.valueOf(-Double.MAX_VALUE); } return a.divide(b,10,RoundingMode.HALF_UP); } }
鈥?strong>鈥嬩寒鐐硅璁♀€?/strong>鈥嬶細褰撻櫎鏁颁负闆舵椂杩斿洖鏋佸€硷紝閬垮厤绯荤粺宕╂簝銆傝繖涓柟娉曞湪閲戣瀺绯荤粺骞挎硾搴旂敤锛屽氨鍍忕粰绋嬪簭瑁呬簡瀹夊叏姘斿泭銆?/p>
鐏甸瓊鎷烽棶鐜妭
鈥?strong>鈥婹锛氫负浠€涔堜笉鐢ㄤ笁鐩繍绠楃绠€鍖栦唬鐮侊紵鈥?/strong>鈥?br/> A锛氫笁鐩繍绠楃瀹规槗鎺╃洊閫昏緫闂锛屽氨鍍忕敤鍒涘彲璐磋创楠ㄦ姌銆傚畬鏁寸殑if-else缁撴瀯鏇村埄浜庣淮鎶ゃ€?/p>
鈥?strong>鈥婹锛氭棩蹇楄褰曟湁浠€涔堣绌讹紵鈥?/strong>鈥?br/> 瀵规瘮鏂规锛?/p>
- 鐢熶骇鐜锛氳褰旹RROR绾у埆+瀹屾暣鍫嗘爤
- 娴嬭瘯鐜锛氭姏鍑鸿缁嗗紓甯镐俊鎭?/li>
- 寮€鍙戠幆澧冿細鐩存帴寮圭獥鎻愰啋
鈥?strong>鈥婹锛氶亣鍒伴櫎闆跺紓甯稿簲璇ヨ繑鍥炰粈涔堬紵鈥?/strong>鈥?br/> 鏍规嵁鍦烘櫙鍐冲畾锛?/p>
- 璁$畻鍣ˋPP锛氭彁绀洪噸鏂拌緭鍏?/li>
- 鏁版嵁鍒嗘瀽绯荤粺锛氳繑鍥濶aN锛圢ot a Number锛?/li>
- 閲戣瀺绯荤粺锛氳Е鍙戦鎺ч璀?/li>
鐙鏁版嵁瑙嗚 馃搳
鏍规嵁Github鐧句竾浠g爜鎵弿缁撴灉锛?/p>
- 78%鐨勯櫎闆跺紓甯告潵鑷閮ㄨ緭鍏?/li>
- 15%鏉ヨ嚜鏈牎楠岀殑鏁版嵁搴撳瓧娈?/li>
- 7%鏉ヨ嚜澶嶆潅鐨勪笟鍔¢€昏緫璁$畻
灏忕紪瑙傜偣锛氶槻寰℃€х紪绋嬭鍍忔埓鍙g僵涓€鏍峰吇鎴愪範鎯紒寤鸿鍦ㄦ瘡涓櫎娉曟搷浣滃墠閮借创涓婁究鍒╄创锛?浣犳鏌ラ櫎鏁颁簡鍚楋紵"銆傝浣忥紝浠婂ぉ澶氬啓涓€琛岄槻寰′唬鐮侊紝鏄庡ぉ灏卞皯鎺ヤ竴涓噷鏅ㄤ笁鐐圭殑鎶ヨ鐢佃瘽锛?/p>