首页 > 趣闻 > 正文内容

Java除法运算防崩溃指南:零值异常处理

趣闻2025-05-28 05:02:44

锛堢獊鐒跺€掑惛涓€鍙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>

搜索