共用方式為


Mod 運算符 (Visual Basic)

除兩個數位,並只傳回餘數。

語法

result = number1 Mod number2

組件

result
必須的。 任何數值變數或屬性。

number1
必須的。 任何數值表達式。

number2
必須的。 任何數值表達式。

支援的類型

所有數值類型。 這包括不帶正負號和浮點型別和 Decimal

結果

結果是 之後 number1 的餘數除以 number2。 例如,表達式 14 Mod 4 評估為 2。

備註

數學中的 餘數模數 之間的差異,負數的結果不同。 Mod Visual Basic 中的 運算子、.NET Framework op_Modulus 運算子和基礎 rem IL 指令都會執行餘數作業。

作業的結果 Mod 會保留股息的正負號, number1因此可能是正數或負數。 結果一律在範圍中 (-number2number2), 獨佔。 例如:

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 是浮點值,則會傳回除法的浮點餘數。 結果的數據類型是最小的數據類型,可以保存與 和number2數據類型number1除法所產生的所有可能值。

如果 number1number2 評估為 Nothing,則會將其視為零。

相關運算子包括下列專案:

嘗試除以零

如果 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 包含這類多載的類別或結構的實例,請務必瞭解其重新定義的行為。 如需詳細資訊,請參閱 運算符程式

範例 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.200000000000000001。 在第二個語句中,常值類型字元 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.

另請參閱