web-dev-qa-db-fra.com

convertir double en int

Quel est le meilleur moyen de convertir une double en int? Faut-il utiliser un casting?

137
user496949

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.

216
Jon Skeet

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

37
Armen Tsirunyan

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);
29
Jeff Mercado

Convert.ToInt32 est le meilleur moyen de convertir

7
anishMarokey

Le meilleur moyen consiste simplement à utiliser Convert.ToInt32. C'est rapide et tourne aussi correctement.

Pourquoi le rendre plus compliqué?

3
majed

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
2
mariana soffer

Je pense que le meilleur moyen est Convert.ToInt32.

2
Singleton

int myInt = (int) Math.Ceiling (myDouble);

1
mathewsun
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

0
Ruth

Mes voies sont:

 - Convert.ToInt32(double_value)
 - (int)double_value
 - Int32.Parse(double_value.ToString());
0
kst