web-dev-qa-db-fra.com

Comment puis-je convertir un double en valeur entière la plus proche?

Comment convertir un double dans le plus proche int?

131
leora

Utilisez Math.round(), éventuellement en conjonction avec 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
76
nickf
double d = 1.234;
int i = Convert.ToInt32(d);

référence

Poignées arrondies comme ceci:

arrondi au nombre entier signé de 32 bits le plus proche. Si la valeur est à mi-chemin entre deux nombres entiers, le nombre pair est renvoyé; c'est-à-dire que 4,5 est converti en 4 et que 5,5 est converti en 6.

242
John Sheehan

Vous pouvez également utiliser la fonction:

//Works with negative numbers now
static int MyRound(double d) {
  if (d < 0) {
    return (int)(d - 0.5);
  }
  return (int)(d + 0.5);
}

Selon l'architecture, il est plusieurs fois plus rapide.

35
szymcio
double d;
int rounded = (int)Math.Round(d);
11
Shea

Je sais que cette question est ancienne, mais je l’ai trouvée dans ma recherche de la réponse à ma question similaire. Je pensais partager le conseil très utile qui m’a été donné.

Lors de la conversion en int, ajoutez simplement 0,5 à votre valeur avant de procéder au downcasting. Comme downcasting to int tombe toujours au nombre le plus bas (par exemple (int) 1.7 = 1), si votre nombre est égal ou supérieur à 0.5, l'ajout de .5 le fera apparaître dans le nombre suivant et votre downcast à int devrait renvoyer la valeur correcte. . (par exemple (int) (1,8 + 0,5) = 2)

J'espère que cette réponse est utile à quiconque.

4
Trent

Pour Unity, utilisez Mathf.RoundToInt .

using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    void Start()
    {
        // Prints 10
        Debug.Log(Mathf.RoundToInt(10.0f));
        // Prints 10
        Debug.Log(Mathf.RoundToInt(10.2f));
        // Prints 11
        Debug.Log(Mathf.RoundToInt(10.7f));
        // Prints 10
        Debug.Log(Mathf.RoundToInt(10.5f));
        // Prints 12
        Debug.Log(Mathf.RoundToInt(11.5f));

        // Prints -10
        Debug.Log(Mathf.RoundToInt(-10.0f));
        // Prints -10
        Debug.Log(Mathf.RoundToInt(-10.2f));
        // Prints -11
        Debug.Log(Mathf.RoundToInt(-10.7f));
        // Prints -10
        Debug.Log(Mathf.RoundToInt(-10.5f));
        // Prints -12
        Debug.Log(Mathf.RoundToInt(-11.5f));
    }
}

Source

public static int RoundToInt(float f) { return (int)Math.Round(f); }
0
zwcloud