Solidity

如何處理除以零的堅固性?

  • January 10, 2022

在流行的程式語言中,除以零會導致拋出異常,例如ZeroDivisionError在 python 中。Solidity 是否允許這樣的異常處理?如果是這樣,我將如何處理除以零?

除以零是一個例外,會導致交易恢復。

function foo(uint num, uint den) public pure returns(uint result) {
 if(den == 0) return 0; // there is no "correct" result, so decide what to do
 result = num / den;
}

除法還有其他細微之處——沒有浮點數、精度、截斷——將這些放在一邊以堅持最初的問題。

通常,除以零是邏輯錯誤或輸入錯誤,因此恢復交易是正確的做法。由於預設消息對於大多數使用者,甚至可能是開發人員來說都是神秘且毫無意義的,因此您可以在仍然拒絕交易的同時提出更具資訊性的消息:

function foo(uint num, uint den) public pure returns(uint result) {
 require(den != 0, "denominator cannot be zero")l
 result = num / den;
}

希望能幫助到你。

引用自:https://ethereum.stackexchange.com/questions/118540