Un petit souci avec les nombres entiers

Résolu
sifadil Messages postés 2 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 28 septembre 2011 - 28 sept. 2011 à 00:49
sifadil Messages postés 2 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 28 septembre 2011 - 28 sept. 2011 à 12:56
Salut
Je suis un débutant en VB.NET et j'ai rencontré un petit souci au niveau des nombres entiers.
Par exemple:
Dim N As Integer = 5 / 2
Dim N2 As Integer = 11 / 2
MsgBox(N)
MsgBox(N2)
Après l'exécution de ce code le premier MessageBox affiche la valeur 2 on peux dire que la valeur affichée est la partie entier de la valeur 2.5, mais ce que je ne comprend pas c'est le résultat du deuxiéme MessageBox, je m'attendais à ce qu'elle soit 5 mais la valeur affiché est 6.

3 réponses

Sehnsucht Messages postés 107 Date d'inscription samedi 25 novembre 2000 Statut Membre Dernière intervention 4 mai 2013
28 sept. 2011 à 01:36
Bonjour,

Le souci, qui n'en est pas vraiment un, est que VB.Net utilise (par souci de compatibilité avec les anciennes versions) ce qu'on appelle l'arrondi bancaire
C'est à dire, arrondir au nombre pair le plus proche (dans le cas xxx.5) ainsi 0.5 s'arrondit à 0 ; 1.5 s'arrondit à 2 et 11 / 2 = 5.5 s'arrondit donc à 6

Pour obtenir 5.5 tu peux faire :
Dim n2 As Integer = Math.Round(11 / 2, MidPointRounding.AwayFromZero)


Pour l'explication, en utilisant cette méthode d'arrondi (couramment utilisée en milieu bancaire comme l'indique son surnom) on compense mutuellement les arrondis successifs, plutôt qu'en arrondissant toujours en supérieur ou toujours en inférieur.

Cordialement !
3
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
28 sept. 2011 à 11:40
Bonjour,

Actives Option Strict et tu verra rapidement ces tentatives de conversion implicites.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
3
sifadil Messages postés 2 Date d'inscription jeudi 28 mai 2009 Statut Membre Dernière intervention 28 septembre 2011
28 sept. 2011 à 12:56
Merci pour les réponses.
0
Rejoignez-nous