¿Cómo se convierte un doble en el int más cercano?
147
Uso Math.round()
, posiblemente en conjunción conMidpointRounding.AwayFromZero
p.ej:
Math.Round(1.2) ==> 1
Math.Round(1.5) ==> 2
Math.Round(2.5) ==> 2
Math.Round(2.5, MidpointRounding.AwayFromZero) ==> 3
Convert.ToInt32()
hará lo mismo, o simplemente eliminará todo después del decimal?Referencia
Asas de redondeo así:
fuente
Math.Round
ya que devuelve un int según sea necesario.[0,.5)
- hacia abajo y exactamente la mitad de los números[.5,1)
- hacia arriba. Redondeando para sesgar incluso un poco los números pares, ya que se redondea(.5,1.5)
a 1 pero[1.5,2.5]
a 2.También puedes usar la función:
Dependiendo de la arquitectura, es varias veces más rápido.
fuente
fuente
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
valor a su valor antes de hacer downcasting. Como el downcastingint
siempre cae al número más bajo (p(int)1.7 == 1
. Ej. ), Si su número es.5
o más alto, sumar.5
lo traerá al siguiente número y su downcastint
debería devolver el valor correcto. (por ejemplo(int)(1.8 + .5) == 2
)fuente
+ 0.5 * Math.Abs(d)
Los métodos en otras respuestas arrojan
OverflowException
si el valor flotante está fuera del rango Int. https://docs.microsoft.com/en-us/dotnet/api/system.convert.toint32?view=netframework-4.8#System_Convert_ToInt32_System_Single_fuente
Para Unity, use Mathf.RoundToInt .
Fuente
fuente
Estoy desarrollando una calculadora científica que tiene un botón Int. He descubierto que la siguiente es una solución simple y confiable:
Math.Round a veces produce resultados inesperados o indeseables, y la conversión explícita a un número entero (mediante conversión o Convert.ToInt ...) a menudo produce valores incorrectos para números de mayor precisión. El método anterior parece funcionar siempre.
fuente