Question

Comment convertir un double en int le plus proche?

Était-ce utile?

La solution

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

Autres conseils

double d = 1.234;
int i = Convert.ToInt32(d);

Référence

Gère les arrondis 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 retourné; c'est-à-dire 4,5   est converti en 4 et 5,5 est converti en 6.

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);
}

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

double d;
int rounded = (int)Math.Round(d);

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 .5 à votre valeur avant de procéder au downcasting. Comme downcasting to int tombe toujours au nombre le plus bas (eg (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 sera utile à quiconque.

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));
    }
}

p>

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

Je développe une calculatrice scientifique dotée d’un bouton Int. J'ai trouvé ce qui suit est une solution simple et fiable:

double dblInteger;
if( dblNumber < 0 )
   dblInteger = Math.Ceiling(dblNumber);
else
   dblInteger = Math.Floor(dblNumber);

Math.Round produit parfois des résultats inattendus ou indésirables, et une conversion explicite en entier (via cast ou Convert.ToInt ...) produit souvent des valeurs incorrectes pour les nombres plus précis. La méthode ci-dessus semble toujours fonctionner.

scroll top