¿Cómo podría convertir un doble al valor entero más cercano?
Pregunta
¿Cómo se convierte un doble en el int más cercano?
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);
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.