CInt ne pas arrondir le Double de la valeur constante - comment puis-je supprimer la partie fractionnaire?
J'ai trébuché sur une question avec CInt et de la conversion d'un double d'un entier.
La question est la suivante:
CInt(10.5) 'Result is 10
CInt(10.51) 'Result it 11, but I expected 10...
Je me suis habitué à C# conversion de style où (int) 10.51
est de 10.
Comme l'a souligné dans la question sur Entier.Analyser vs CInt, le résultat est simplement arrondi d'une certaine façon.
Cependant, tout ce que je besoin est d'obtenir seulement la partie entière et de jeter les fractions. Comment puis-je obtenir ce type de conversion en VB.NET? Après quelques recherches je vois que je peux utiliser le Fix()
fonction de faire le tour, mais est-il le meilleur choix?
Pire: cint(10.5) = 10 mais cint(11.5) = 12. si la partie entière est même arrondissement des .50000000 est en bas, pour les il est!
OriginalL'auteur nbulba | 2011-10-07
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
Int
ouFix
fonctions sans valeur de retour de type de ces fonctions est double, donc vous devez le convertir en Entier sioption strict
eston
.En combinant les deux réponses, je pense que
CInt(Int(10.51))
devrait fonctionner 😉OriginalL'auteur adatapost
Tout d'abord, votre hypothèse que
CInt
est équivalent à(int)
en C# est incorrect.Deuxièmement, le fait d'arrondir le comportement de
CInt
n'est pas attribué de façon aléatoire - en fait, il utilise "les banquiers arrondi":Le meilleur équivalent à l'utilisation de
(int)
en C# est leFix
fonction dans leVisualBasic
de noms qui arrondit vers zéro (le même queMath.Truncate
).Toutefois, cela renvoie une valeur Double de sorte que vous avez à faire une autre conversion pour obtenir à votre entier en utilisant
CInt
.OriginalL'auteur Matt Wilko
Je pense que vous pouvez essayer
CInt(Math.Floor(10.51))
espérons que cela aide
Math.Floor(-10.51)
est-11
. Si vous voulez-10
, vous pouvez utiliserMath.Truncate
.OriginalL'auteur Ginka