Quelle est la meilleure façon de convertir un double
en un int
? Doit-on utiliser un plâtre?
etc.
:)
Quelle est la meilleure façon de convertir un double
en un int
? Doit-on utiliser un plâtre?
etc.
:)
Réponses:
Vous pouvez utiliser un cast si vous voulez le comportement par défaut de tronquer vers zéro. Alternativement, vous pouvez utiliser Math.Ceiling
, Math.Round
, Math.Floor
etc - mais vous aurez toujours besoin d' un plâtre après.
N'oubliez pas que la plage de int
est beaucoup plus petite que celle de double
. Un cast de double
vers int
ne lèvera pas d'exception si la valeur est en dehors de la plage de int
dans un contexte non vérifié, alors qu'un appel à Convert.ToInt32(double)
will. 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.
int
est toujours de 32 bits, que vous utilisiez une machine 32 ou 64 bits.
intVal = System.Convert.ToInt32(System.Math.Floor(dblVal));
using System;
en haut du fichier, à quel point cela pourrait simplement êtreintVal = Convert.ToInt32(Math.Floor(dblVal));
using
directives.
si vous utilisez cast, c'est-à-dire que (int)SomeDouble
vous tronquerez la partie fractionnaire. Autrement dit, si SomeDouble
4,9999 était égal à 4,9999, le résultat serait 4 et non 5. La conversion en int n'arrondit pas le nombre. Si vous souhaitez arrondir, utilisezMath.Round
Ouais pourquoi pas?
double someDouble = 12323.2;
int someInt = (int)someDouble;
Utiliser la Convert
classe fonctionne bien aussi.
int someOtherInt = Convert.ToInt32(someDouble);
Convert.ToInt32
est le meilleur moyen de convertir
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 souhaitez arrondir le nombre à l'entier le plus proche, procédez comme suit:
i = (int) Math.Round(x / y); // Line replaced
Mes manières sont:
- Convert.ToInt32(double_value)
- (int)double_value
- Int32.Parse(double_value.ToString());
double_value = 0.1
label8.Text = "" + years.ToString("00") + " years";
lorsque vous voulez l'envoyer à une étiquette, ou quelque chose, et que vous ne voulez pas de composant fractionnaire, c'est la meilleure façon
label8.Text = "" + years.ToString("00.00") + " years";
si tu veux avec seulement 2, et c'est toujours comme ça