Mod, opérateur (Visual Basic)

Divise deux nombres et retourne uniquement le reste.

Syntaxe

result = number1 Mod number2

Éléments

result
Obligatoire. Toute variable ou propriété numérique.

number1
Obligatoire. Toute expression numérique.

number2
Obligatoire. Toute expression numérique.

Types pris en charge

tous les types numériques Cela comprend les types à virgule flottante non signée et Decimal .

Résultats

Le résultat est le reste de la number1 Division de par number2 . Par exemple, l’expression 14 Mod 4 prend la valeur 2.

Notes

Il existe une différence entre le reste et le modulo en mathématiques, avec des résultats différents pour les nombres négatifs. l' Mod opérateur dans Visual Basic, l' op_Modulus opérateur .NET Framework, et l’instruction rem IL sous-jacente effectuent toutes une opération de reste.

Le résultat d’une Mod opération conserve le signe du dividende, number1 et peut donc être positif ou négatif. Le résultat est toujours dans la plage (- number2 , number2 ), exclusif. Par exemple :

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

Notes

Si number1 ou number2 est une valeur à virgule flottante, le reste à virgule flottante de la Division est retourné. Le type de données du résultat est le plus petit type de données qui peut contenir toutes les valeurs possibles qui résultent de la division avec les types de données de number1 et number2 .

Si number1 ou number2 a la valeur Nothing, il est traité comme zéro.

Les opérateurs connexes sont les suivants :

  • l' opérateur \ (Visual Basic) retourne le quotient entier d’une division. Par exemple, l’expression 14 \ 4 prend la valeur 3.

  • l' opérateur/(Visual Basic) retourne le quotient complet, y compris le reste, sous la forme d’un nombre à virgule flottante. Par exemple, l’expression 14 / 4 prend la valeur 3,5.

Division par zéro

Si number2 prend la valeur zéro, le comportement de l' Mod opérateur dépend du type de données des opérandes :

  • Une division intégrale lève une DivideByZeroException exception si number2 ne peut pas être déterminée au moment de la compilation et génère une erreur au moment de la compilation BC30542 Division by zero occurred while evaluating this expression si number2 est évalué à zéro au moment de la compilation.
  • Une division à virgule flottante retourne Double.NaN .

Formule équivalente

L’expression a Mod b est équivalente à l’une des formules suivantes :

a - (b * (a \ b))

a - (b * Fix(a / b))

Imprécision à virgule flottante

Lorsque vous utilisez des nombres à virgule flottante, n’oubliez pas qu’ils n’ont pas toujours une représentation décimale précise en mémoire. Cela peut entraîner des résultats inattendus de certaines opérations, telles que la comparaison de valeurs et l' Mod opérateur. Pour plus d’informations, consultez Dépannage des types de données.

Surcharge

L' Mod opérateur peut être surchargé, ce qui signifie qu’une classe ou une structure peut redéfinir son comportement. Si votre code s’applique Mod à une instance d’une classe ou d’une structure qui comprend une telle surcharge, veillez à bien comprendre son comportement redéfini. Pour plus d'informations, consultez Operator Procedures.

Exemple 1

L’exemple suivant utilise l' Mod opérateur pour diviser deux nombres et retourner uniquement le reste. Si un nombre est un nombre à virgule flottante, le résultat est un nombre à virgule flottante qui représente le reste.

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

Exemple 2

L’exemple suivant illustre le imprécision potentiel des opérandes à virgule flottante. Dans la première instruction, les opérandes sont Double et 0,2 est une fraction binaire à répétition infinie avec une valeur stockée de 0.20000000000000001. Dans la deuxième instruction, le caractère de type de littéral D force les deux opérandes à Decimal , et 0,2 a une représentation précise.

firstResult = 2.0 Mod 0.2
' Double operation returns 0.2, not 0.
secondResult = 2D Mod 0.2D
' Decimal operation returns 0.

Voir aussi