C# - Convertir un nombre décimal en int32
J'ai le code suivant:
int a = Convert.ToInt32(4.5m);
int b = Convert.ToInt32(5.5m);
Console.WriteLine(a);
Console.WriteLine(b);
Et voici le résultat:
4
6
Pourquoi ne Convert.ToInt32
tours de valeurs décimales au nombre pair plus proche?
donc, vous vous attendez
oui, je m'attends à
mais, pourquoi attendre quelque chose de différent ?
Ok j'aurais attendre a=5 et b= 6
Définir "le plus proche". 4 et 6 sont à une distance égale à 5,5
4
et 5
?oui, je m'attends à
4
et 5
mais, pourquoi attendre quelque chose de différent ?
Ok j'aurais attendre a=5 et b= 6
Définir "le plus proche". 4 et 6 sont à une distance égale à 5,5
OriginalL'auteur | 2012-05-11
Vous devez vous connecter pour publier un commentaire.
Convertir est à l'aide d'arrondi au plus près, ou de l'arrondi:
Excellente explication.
OriginalL'auteur ie.
MSDN:
Ou:
Vous pouvez aussi simplement utiliser explicitement l'int opérateur de cast:
De lire cette note de MSDN:
Noter que la décimale est plus grand que
int
donc, si la valeur est plus grande queint.MaxValue
vous obtenez uneOverflowException
Les mathématiques.Étage arrondit toujours vers le bas, c'est que ce que l'OP veut. et si c'était (4,9 m), vous obtenez 4
(Int) va aussi faire le travail.
Cela dépend des nombres négatifs.
Son ok de toute façon, si c'était ce qu'il voulait, il va choisir la réponse.
OriginalL'auteur gdoron
Mathématiques.Round() vous permet de choisir
(Et, comme vous le devinez, la valeur par défaut est
ToEven
)OriginalL'auteur Dirk
Il n'est que parce que c'est la façon dont il est défini (voir ci-dessous pour raison):
vous auriez à utiliser quelque chose comme
Math.Floor
si vous voulez des résultats différents.La documentation pour
Math.Ronde
, qui fait la même chose, les membres de la raison:voir ma réponse ci-dessous, je pense que c'est un peu l'explique. et Dirk montre comment choisir la façon dont vous souhaitez ronde
Le fait que vous demandez et qui vont tout à fait tort résultats montre clairement que vous NE connaissez PAS la raison. En plus de vous demandé
"why is this happening?"
J'ai étendu ma réponse à fournir une explication.
Convert.ToInt32(decimal)
le même type d'arrondi commeMath.Round
par défaut.OriginalL'auteur Botz3000
De http://msdn.microsoft.com/en-us/library/93kx4xke
Botz3000
déjà dit. Je ne comprends pas le point de cette réponse.Si vous regardez l'horodatage vous pouvez voir que nous avons posté en même temps.
OriginalL'auteur JonC
J'ai lu quelque chose hier que lors de l'arrondi, il est arrondi à la plus proche même nombre, les banquiers de l'arrondissement. Vous avez à lui dire comment vous voulez arrondir
EDIT: vous avez demandé une explication de pourquoi il arrondit au nombre pair le plus proche.
dire que vous avez 10 numéros (c'est un cas extrême
1.5,
2.5,
3.5,
4.5,
5.5,
6.5,
7.5,
8.5,
9.5,
10.5
la somme = 60
si autour de vous tous les premiers
la somme = 65 parce qu'ils seraient tous arrondir
si vous banquiers autour d'eux
la somme = 60
Vérifier les horaires, les réponses ont été ajoutés... ils ont répété moi de ne pas la dans le cas contraire, et je conviens que je n'ai pas expliquer pourquoi, sauf qu'il ajoute de la précision, c'est pourquoi dans les autres commentaires que j'ai fait j'ai dit aux gens de lire leurs réponses
Je ne savais pas que.
OriginalL'auteur General Grey