Quelle est la méthode recommandée pour convertir un type à virgule flottante en type entier, tout tronquer après le point décimal? Clng tours, apparemment, et la documentation pour l'opérateur = ne mentionne pas le sujet.Comment convertir un type à virgule flottante en un type entier sans arrondir dans VB6
Répondre
Pour les nombres positifs que vous utilisez
truncated = Int(value)
Si elle est utilisée sur les nombres négatifs, il descendrait, à savoir -7,2 deviendrait -8.
voir this
comportement Undocumented de la fonction CInt() Les tours de fonction CInt() à la plus proche valeur entière. En d'autres termes, CInt (2.4) renvoie 2 et CInt (2.6) renvoie 3.
Cette fonction présente un comportement sous-documenté lorsque la partie fractionnaire est égale à 0,5. Dans ce cas, cette fonction arrondit vers le bas si la partie entière de l'argument est paire, mais arrondit si la partie entière est un nombre impair. Par exemple, CInt (2.5) renvoie 2, mais CInt (3.5) renvoie 4.
Ce comportement ne doit pas être considéré comme un bogue, car il permet de ne pas introduire d'erreurs lors de calculs statistiques. MISE À JOUR: Matthew Wills nous informe que ce comportement est bien documenté dans le fichier d'aide de VB6: Lorsque la partie fractionnaire est exactement égale à 0.5, CInt et CLng l'arrondissent toujours au nombre pair le plus proche. Par exemple, 0,5 arrondit à 0 et 1,5 arrondit à 2. CInt et CLng diffèrent des fonctions Fix et Int, qui tronquent, plutôt que rond, la partie fractionnaire d'un nombre. En outre, Fix et Int renvoient toujours une valeur du même type que celle qui est transmise.
Voir [ici] (http://stackoverflow.com/questions/137114/how-to-round-in-ms-access-vba/137177#137177) pour plus d'informations. –
@Lance Roberts, est-ce que cela s'applique aussi à VB6, ou seulement à VBA? – Beth
Je n'ai pas testé toutes les options de VB6, bien que ce soit une bonne idée. Le concept de l'arrondissement des banquiers est le même. –
Utilisez Fix
ou Int
en fonction du traitement que vous souhaitez pour les nombres négatifs.
L'article Q196652 de Microsoft traite de l'arrondi avec des détails incroyables. Voici un extrait
La fonction VB
Fix()
est un exemple de troncature. Par exemple,Fix(3.5)
est3
, etFix(-3.5)
est-3
. La fonctionInt()
arrondit à l'entier le plus haut inférieur à la valeur . Les deuxInt()
etFix()
acte de la même façon avec des chiffres positifs - tronquer - mais donner différents résultats pour les nombres négatifs:Int(-3.5)
donne-4
.
divulgation complète: j'ai parlé this nice answer par elo80ka
Voir [ici] (http://stackoverflow.com/questions/137114/how-to-round-in-ms-access-vba/137177#137177) que Fix a un bug. –
@Lance Roberts: Merci pour votre note. Il arrive que j'ai choisi Int. Phew! –
vous devriez regarder le lien que j'ai donné la réponse acceptée. Correction a un bug dedans. –