convertir double en int


156

Quelle est la meilleure façon de convertir un doubleen un int? Doit-on utiliser un plâtre?


7
définir «meilleur». dépend si vous voulez arrondir vers le haut / bas, etc.
RPM1984

8
@ RPM1984: Define etc.:)
Armen Tsirunyan

18
@Armen - touche` :) Peu importe de toute façon - Skeet est là, rien d'autre n'a d'importance.
RPM1984

Réponses:


237

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.Flooretc - mais vous aurez toujours besoin d' un plâtre après.

N'oubliez pas que la plage de intest beaucoup plus petite que celle de double. Un cast de doublevers intne lèvera pas d'exception si la valeur est en dehors de la plage de intdans 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.


24
@user: La taille d'un intest toujours de 32 bits, que vous utilisiez une machine 32 ou 64 bits.
Joren

3
Et les doubles peuvent être beaucoup plus lourds que même un int 64 bits.
Adrian Ratnapala

7
Pour C # noobs comme moi: Math et Convert font tous deux partie de System. Donc la réponse complète ressemble à ceci:intVal = System.Convert.ToInt32(System.Math.Floor(dblVal));
kris

9
@ user1290746: Cela fonctionnerait, mais vous avez généralement juste using System;en haut du fichier, à quel point cela pourrait simplement êtreintVal = Convert.ToInt32(Math.Floor(dblVal));
Jon Skeet

3
@ user1290746: Mais dans ce cas, je ne pense pas que la bonne solution soit de conseiller aux gens d'utiliser les noms complets - la meilleure solution est de se renseigner sur les usingdirectives.
Jon Skeet

39

si vous utilisez cast, c'est-à-dire que (int)SomeDoublevous tronquerez la partie fractionnaire. Autrement dit, si SomeDouble4,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


34

Ouais pourquoi pas?

double someDouble = 12323.2;
int someInt = (int)someDouble;

Utiliser la Convertclasse fonctionne bien aussi.

int someOtherInt = Convert.ToInt32(someDouble);

7

Convert.ToInt32 est le meilleur moyen de convertir


C'est une fonction généralement dangereuse car elle accepte n'importe quoi.
Ant_222

4

Le meilleur moyen est d'utiliser simplement Convert.ToInt32. Il est rapide et s'arrondit correctement.

Pourquoi compliquer les choses?


2

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



0

Mes manières sont:

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

11
Ne pensez-vous pas que la troisième voie est inutilement complexe et lente?
Armen Tsirunyan

6
Le troisième ne fonctionnera pas avec des doubles avec des parties fractionnaires. par exemple,double_value = 0.1
Jeff Mercado

Je pense que vous pouvez utiliser Math.Floor.
lindexi

0
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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.