Meilleur auteur de réponses
dépassement de capacité d'un int 64

Question
-
Bonjour,
Je m'amuse à faire un calculette et j'essaye de tester le dépassement de capacité d'un int 64 pour la multiplication
mais j'ai quand même une erreur de dépassement de capacité
Operande1 et 2 sont des int64
Avez-vous une idée ?
Voici mon code:
Private Sub ButtonEgale_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonEgale.Click
Operande2 = Val(TextBoxAffichage.Text)
If Operation = 1 Then
TextBoxAffichage.Text = Operande1 + Operande2
ElseIf Operation = 2 Then
TextBoxAffichage.Text = Operande1 - Operande2
ElseIf Operation = 3 And ((Operande1 * Operande2) < Int64.MaxValue) Then
'Gérer le dépassement de capacité d'un int 64
TextBoxAffichage.Text = Operande1 * Operande2
ElseIf Operation = 4 And Operande2 <> 0 Then
TextBoxAffichage.Text = Operande1 / Operande2
End If
End Sub
Réponses
-
Tu obtiens une erreur car dans le test tu effectues l'opération qui provoque ce dépassement, pour être plus clair (enfin un peu ^^) tu teste si Opérande1 * Opérande2 est inférieur à Int64.MaxValue, pour tester cela, l'opération doit être effectuée mais si elle est effectuée et qu'elle dépasse, c'est déjà trop tard, donc l'erreur survient.
Un moyen de faire (et de simplifier ta procédure au passage):
Private Sub ButtonEgale_Click(ByVal sender As Object, ByVal e As EventArgs) Handles ButtonEgale.Click
' Initialise Operande2 à zéroOperande2 = 0
' Teste si le contenu du TextBox est convertible en Int64
' et si oui le stocke dans Operande2
If Int64.TryParse(TextBoxAffichage.Text, Operande2) ThenSelect Case OperationElse
Case 1End Select
TextBoxAffichage.Text = (Operande1 + Operande2).ToString()Case 2
TextBoxAffichage.Text = (Operande1 - Operande2).ToString()Case 3
TryCase 4 ' Case Else s'il n'y a pas d'autre cas
TextBoxAffichage.Text = (Operande1 * Operande2).ToString()Catch oex As OverflowException
TextBoxAffichage.Text = "L'opération a provoqué un dépassement de capacité."End Try
If Operande2 <> 0 Then
TextBoxAffichage.Text = (Operande1 / Operande2).ToString()Else
TextBoxAffichage.Text = "Division par zéro impossible."End If
TextBoxAffichage.Text = "Vous n'avez pas saisi un nombre."End If
Ce n'est qu'une suggestion parmi d'autres (nombreuses) possibilités, toutefois; quelques conseils:
- Penser à ajouter "Option Strict On" et "Option Explicit On" pour éviter les erreurs de variables non déclarées ou les erreurs de conversion.
- Utiliser un contrôle (ou une limitation) sur la saisie de tes TextBox si elles ne doivent contenir que des nombres ou mieux dans ce cas, utiliser un contrôle NumericUpDown qui est tout particulièrement pratique dans ce genre de cas.
En espérant que tout cela te sera utile !
Toutes les réponses
-
Tu obtiens une erreur car dans le test tu effectues l'opération qui provoque ce dépassement, pour être plus clair (enfin un peu ^^) tu teste si Opérande1 * Opérande2 est inférieur à Int64.MaxValue, pour tester cela, l'opération doit être effectuée mais si elle est effectuée et qu'elle dépasse, c'est déjà trop tard, donc l'erreur survient.
Un moyen de faire (et de simplifier ta procédure au passage):
Private Sub ButtonEgale_Click(ByVal sender As Object, ByVal e As EventArgs) Handles ButtonEgale.Click
' Initialise Operande2 à zéroOperande2 = 0
' Teste si le contenu du TextBox est convertible en Int64
' et si oui le stocke dans Operande2
If Int64.TryParse(TextBoxAffichage.Text, Operande2) ThenSelect Case OperationElse
Case 1End Select
TextBoxAffichage.Text = (Operande1 + Operande2).ToString()Case 2
TextBoxAffichage.Text = (Operande1 - Operande2).ToString()Case 3
TryCase 4 ' Case Else s'il n'y a pas d'autre cas
TextBoxAffichage.Text = (Operande1 * Operande2).ToString()Catch oex As OverflowException
TextBoxAffichage.Text = "L'opération a provoqué un dépassement de capacité."End Try
If Operande2 <> 0 Then
TextBoxAffichage.Text = (Operande1 / Operande2).ToString()Else
TextBoxAffichage.Text = "Division par zéro impossible."End If
TextBoxAffichage.Text = "Vous n'avez pas saisi un nombre."End If
Ce n'est qu'une suggestion parmi d'autres (nombreuses) possibilités, toutefois; quelques conseils:
- Penser à ajouter "Option Strict On" et "Option Explicit On" pour éviter les erreurs de variables non déclarées ou les erreurs de conversion.
- Utiliser un contrôle (ou une limitation) sur la saisie de tes TextBox si elles ne doivent contenir que des nombres ou mieux dans ce cas, utiliser un contrôle NumericUpDown qui est tout particulièrement pratique dans ce genre de cas.
En espérant que tout cela te sera utile ! -