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

備註

如果 number1number2 是浮點值,則會傳回除數的浮點餘數。 結果的資料類型是最小的資料類型,可保存所有可能的值,這些值都是使用資料類型為 number1number2 的除數所產生的所有可能值。

如果 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 套用至包含這類多載之類別或結構的執行個體,請務必瞭解其重新定義的行為。 如需詳細資訊,請參閱 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.

另請參閱