Mod 運算子 (Visual Basic)
將兩個數字相除,然後只傳回餘數。
語法
result = number1 Mod number2
組件
result
必要。 任何數值變數或屬性。
number1
必要。 任何數值運算式。
number2
必要。 任何數值運算式。
支援的類型
所有數值類型。 這包括不帶正負號和浮點型別和 Decimal
。
結果
結果是 number1
除以 number2
後所留的餘數。 例如,運算式 14 Mod 4
評估為 2。
注意
數學中的餘數與模數之間有差異,而負數的結果則不同。 Visual Basic 中的 Mod
運算子、.NET Framework op_Modulus
運算子和基礎 rem IL 指令全都會執行餘數作業。
Mod
作業的結果會保留被除數的正負號 number1
,因此可能是正數或負數。 結果一律位於 (-number2
, number2
) 獨佔的範圍內。 例如:
Public Module Example
Public Sub Main()
Console.WriteLine($" 8 Mod 3 = {8 Mod 3}")
Console.WriteLine($"-8 Mod 3 = {-8 Mod 3}")
Console.WriteLine($" 8 Mod -3 = {8 Mod -3}")
Console.WriteLine($"-8 Mod -3 = {-8 Mod -3}")
End Sub
End Module
' The example displays the following output:
' 8 Mod 3 = 2
' -8 Mod 3 = -2
' 8 Mod -3 = 2
' -8 Mod -3 = -2
備註
如果 number1
或 number2
是浮點值,則會傳回除數的浮點餘數。 結果的資料類型是最小的資料類型,可保存所有可能的值,這些值都是使用資料類型為 number1
和 number2
的除數所產生的所有可能值。
如果 number1
或 number2
評估為 Nothing,則會將其視為零。
相關的運算子包括下列:
\ 運算子 (Visual Basic) 傳回除數的整數商數。 例如,運算式
14 \ 4
評估為 3。/ 運算子 (Visual Basic) 會以浮點數傳回完整商數,包括餘數。 例如,運算式
14 / 4
評估為 3.5。
嘗試除數為零
如果 number2
評估為零,則運算子 Mod
的行為取決於運算元的資料類型:
- 如果無法在編譯時期判斷
number2
,整數除法會擲回 DivideByZeroException 例外狀況,並在number2
於編譯時期評估為零時,產生編譯時期錯誤BC30542 Division by zero occurred while evaluating this expression
。 - 浮點除數會傳回 Double.NaN。
對等公式
運算式 a Mod b
相當於下列其中一個公式:
a - (b * (a \ b))
a - (b * Fix(a / b))
浮點不精確
當您使用浮點數,請記住,浮點數不一定在記憶體中具有精確的十進位表示。 這可能會導致來自特定作業的非預期結果,例如值比較和 Mod
運算子。 如需詳細資訊,請參閱資料類型疑難排解。
多載化
Mod
運算子可以多載,這表示類別或結構可以重新定義其行為。 如果您的程式碼將 Mod
套用至包含這類多載之類別或結構的執行個體,請務必瞭解其重新定義的行為。 如需詳細資訊,請參閱 Operator Procedures。
範例 1
下列範例會使用 Mod
運算子來除兩個數字,並只傳回餘數。 如果任一個數字是浮點數,結果就是代表餘數的浮點數。
Debug.WriteLine(10 Mod 5)
' Output: 0
Debug.WriteLine(10 Mod 3)
' Output: 1
Debug.WriteLine(-10 Mod 3)
' Output: -1
Debug.WriteLine(12 Mod 4.3)
' Output: 3.4
Debug.WriteLine(12.6 Mod 5)
' Output: 2.6
Debug.WriteLine(47.9 Mod 9.35)
' Output: 1.15
範例 2
下列範例示範浮點運算元可能出現的不精確。 在第一個陳述式中,運算元為 Double
,而 0.2 是無限重複的二進位分數,其預存值為 0.20000000000000001。 在第二個陳述式中,常值型別字元 D
會將兩個運算元都強制為 Decimal
,而 0.2 具有精確的表示。
firstResult = 2.0 Mod 0.2
' Double operation returns 0.2, not 0.
secondResult = 2D Mod 0.2D
' Decimal operation returns 0.