Quel est le meilleur moyen de convertir une double
en int
? Faut-il utiliser un casting?
Vous pouvez utiliser un transtypage si vous souhaitez que le comportement par défaut troncature-vers-zéro. Sinon, vous pouvez aussi utiliser Math.Ceiling
, Math.Round
, Math.Floor
etc.
N'oubliez pas que la plage de int
est beaucoup plus petite que celle de double
. Un transtypage de double
à int
ne lève pas d'exception si la valeur est en dehors de la plage de int
dans un contexte non contrôlé, alors qu'un appel à Convert.ToInt32(double)
le sera. Le résultat de la conversion (dans un contexte non vérifié) est explicitement indéfini si la valeur est en dehors de la plage.
si vous utilisez la conversion, c'est-à-dire (int)SomeDouble
, vous tronquerez la partie fractionnaire. Autrement dit, si SomeDouble
était 4,9999, le résultat serait 4, pas 5. La conversion en int ne arrondit pas le nombre. Si vous voulez arrondir, utilisez Math.Round
Ouais pourquoi pas?
double someDouble = 12323.2;
int someInt = (int)someDouble;
L'utilisation de la classe Convert
fonctionne bien aussi.
int someOtherInt = Convert.ToInt32(someDouble);
Convert.ToInt32
est le meilleur moyen de convertir
Le meilleur moyen consiste simplement à utiliser Convert.ToInt32
. C'est rapide et tourne aussi correctement.
Pourquoi le rendre plus compliqué?
Voici un exemple complet
class Example
{
public static void Main()
{
double x, y;
int i;
x = 10.0;
y = 3.0;
// cast double to int, fractional component lost (Line to be replaced)
i = (int) (x / y);
Console.WriteLine("Integer outcome of x / y: " + i);
}
}
Si vous voulez arrondir le nombre à l'entier le plus proche, procédez comme suit:
i = (int) Math.Round(x / y); // Line replaced
Je pense que le meilleur moyen est Convert.ToInt32
.
int myInt = (int) Math.Ceiling (myDouble);
label8.Text = "" + years.ToString("00") + " years";
lorsque vous voulez l'envoyer à une étiquette ou quelque chose comme ça et que vous ne voulez pas de composant décimal, c'est la meilleure façon
label8.Text = "" + years.ToString("00.00") + " years";
si vous voulez avec seulement 2, et c'est toujours comme ça
Mes voies sont:
- Convert.ToInt32(double_value)
- (int)double_value
- Int32.Parse(double_value.ToString());