181 votes

Comment puis-je convertir un double à l'entier le plus proche de la valeur?

comment voulez-vous convertir un double en int (peut retirer de l'arrondi)

316voto

Runscope API Tools Points 43859
double d = 1.234;
int i = Convert.ToInt32(d);

Référence

Poignées arrondis comme suit: "arrondi au plus proche entier signé 32 bits. Si la valeur est à mi-chemin entre deux nombres entiers, le même nombre est retourné, qui est, à 4.5 est converti à 4 et 5.5 est converti à 6."

92voto

nickf Points 185423

Utiliser Math.round(), éventuellement en collaboration avec des MidpointRounding.AwayFromZero

par exemple:

Math.Round(1.2) ==> 1
Math.Round(1.5) ==> 2
Math.Round(2.5) ==> 2
Math.Round(2.5, MidpointRounding.AwayFromZero) ==> 3

40voto

szymcio Points 151

Vous pouvez également utiliser la fonction:

static int MyRound(double d)
{
    return (int)(d + 0.5);
}

En fonction de l'architecture, il est plusieurs fois plus rapide.

6voto

Trent Points 20

Je sais que cette question est vieux, mais je suis tombé sur ça dans ma recherche de la réponse à ma question similaire. Je pensais que je voudrais partager l'astuce très utile qui m'ont été données.

Lors de la conversion en int, il suffit d'ajouter .5 à votre valeur avant de passer. Comme de passer à int toujours gouttes à la diminution du nombre (par exemple, (int)1.7 = 1), si votre numéro est le 5 ou supérieure, en ajoutant .5 va le mettre dans le prochain numéro et votre abattu à l'int doit retourner la valeur correcte. (par exemple, (int)(1.8 + .5) = 2)

J'espère que cette réponse est utile à tout le monde.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X