convertir doble a int

¿Cuál es la mejor forma de convertir un double en un int ? ¿Debería usarse un yeso?

Puedes usar un molde si quieres el comportamiento truncado-hacia-cero predeterminado. Alternativamente, es posible que desee utilizar Math.Ceiling , Math.Ceiling , Math.Round , etc., aunque aún necesitará un yeso después.

No olvide que el rango de int es mucho más pequeño que el rango de double . Un lanzamiento de double a int no arrojará una excepción si el valor está fuera del rango de int en un contexto no verificado, mientras que una Convert.ToInt32(double) a Convert.ToInt32(double) hará. El resultado del lanzamiento (en un contexto no verificado) está explícitamente indefinido si el valor está fuera del rango.

si usa cast, es decir, (int)SomeDouble , truncará la parte fraccionaria. Es decir, si SomeDouble fuera 4.9999 el resultado sería 4, no 5. Convertir a int no redondea el número. Si desea redondear use Math.Round

¿Si, Por qué no?

 double someDouble = 12323.2; int someInt = (int)someDouble; 

Usar la clase Convert también funciona bien.

 int someOtherInt = Convert.ToInt32(someDouble); 

Convert.ToInt32 es la mejor forma de convertir

Aquí hay un ejemplo completo

 class Example { public static void Main() { double x, y; int i; x = 10.0; y = 3.0; // cast double to int, fractional component lost (Line to be replaced) i = (int) (x / y); Console.WriteLine("Integer outcome of x / y: " + i); } } 

Si desea redondear el número al entero más cercano haga lo siguiente:

 i = (int) Math.Round(x / y); // Line replaced 

Creo que la mejor manera es Convert.ToInt32 .

La mejor manera es simplemente usar Convert.ToInt32 . Es rápido y también se redondea correctamente.

¿Por qué hacerlo más complicado?

Mis formas son:

  - Convert.ToInt32(double_value) - (int)double_value - Int32.Parse(double_value.ToString()); 
 label8.Text = "" + years.ToString("00") + " years"; 

cuando desea enviarlo a una etiqueta, o algo así, y no desea ningún componente fraccionario, esta es la mejor manera

 label8.Text = "" + years.ToString("00.00") + " years"; 

si quieres con solo 2, y siempre es así

int myInt = (int) Math.Ceiling (myDouble);