整數除法向上取整的可靠方法
整數除法預設會向零取整,這會導致問題。為了確保始終向上取整,我們需要更好的解決方案。
文中提供的範例中,將操作數轉換為雙精度浮點數並使用Math.Ceiling()
是一種可行的變通方法,但這被認為是不規範且低效的。
我們推薦以下方法:
1. 明確定義規範
2. 設計可測試的演算法
將問題分解成更小的步驟:
3. 實現解決方案
以下是一個範例實作:
<code class="language-java">public static int DivRoundUp(int dividend, int divisor) { if (divisor == 0) throw new IllegalArgumentException("除数为零"); if (divisor == -1 && dividend == Integer.MIN_VALUE) throw new ArithmeticException("整数溢出"); int quotient = dividend / divisor; boolean dividedEvenly = (dividend % divisor) == 0; if (dividedEvenly) return quotient; boolean roundedDown = ((divisor > 0) == (dividend > 0)); return roundedDown ? quotient + 1 : quotient; }</code>
此演算法符合指定的行為,向上取整所有非整除的除法結果。它還能很好地處理溢出和零除法錯誤。雖然這不是最優雅的解決方案,但它清晰、可測試且正確。
以上是如何確保整數除法始終向上捨入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!