Pregunta

¿Cómo se convierte un doble en el int más cercano?

¿Fue útil?

Solución

Use Math.round () , posiblemente junto con MidpointRounding.AwayFromZero

por ejemplo:

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

Otros consejos

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

Referencia

Maneja el redondeo de esta manera:

  

redondeado al entero con signo de 32 bits más cercano. Si el valor está a la mitad   entre dos números enteros, se devuelve el número par; es decir, 4.5   se convierte a 4 y 5.5 se convierte a 6.

También puede usar la función:

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

Dependiendo de la arquitectura, es varias veces más rápido.

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

Sé que esta pregunta es antigua, pero la encontré en mi búsqueda de la respuesta a mi pregunta similar. Pensé en compartir el consejo muy útil que me dieron.

Cuando convierta a int, simplemente agregue .5 a su valor antes de bajar. Como la conversión a int siempre cae al número más bajo (p. Ej. (Int) 1.7 = 1), si su número es .5 o más alto, al agregar .5 aparecerá el siguiente número y su conversión a int debería devolver el valor correcto . (por ejemplo, (int) (1.8 + .5) = 2)

Espero que esta respuesta sea útil para cualquiera.

Para Unity, use 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));
    }
}

Fuente p>

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

Estoy desarrollando una calculadora científica que luce un botón Int. He descubierto que lo siguiente es una solución simple y confiable:

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

Math.Round a veces produce resultados inesperados o indeseables, y la conversión explícita a entero (a través de cast o Convert.ToInt ...) a menudo produce valores incorrectos para números de mayor precisión. El método anterior parece funcionar siempre.

scroll top