¿Cuál es la mejor manera de convertir un double
en un int
? ¿Debería usarse un yeso?convertir doble a int
Respuesta
Puede usar un molde si desea el comportamiento predeterminado de truncar a cero. Alternativamente, es posible que desee utilizar Math.Ceiling
, Math.Round
, Math.Floor
, 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
. Una conversión de double
a int
no arrojará una excepción si el valor está fuera del rango de int
en un contexto sin marcar, mientras que una llamada a Convert.ToInt32(double)
lo hará. El resultado del lanzamiento (en un contexto no verificado) está explícitamente indefinido si el valor está fuera del rango.
Me pregunto si en la máquina de 64 bits, Convert.ToInt32 ya no está bien? – user496949
@user: El tamaño de un 'int' es siempre de 32 bits, independientemente de si está utilizando una máquina de 32 o 64 bits. – Joren
Y los dobles pueden ser mucho más grandes que incluso un int de 64 bits. –
Sí, ¿por qué no?
double someDouble = 12323.2;
int someInt = (int)someDouble;
El uso de la clase Convert
también funciona bien.
int someOtherInt = Convert.ToInt32(someDouble);
Convert.ToInt32
es la mejor manera de convertir
Esta es una función típicamente insegura porque acepta cualquier cosa. –
si utiliza fundido, es decir, (int)SomeDouble
va a truncar la parte fraccionaria. Es decir, si SomeDouble
fuera 4.9999, el resultado sería 4, no 5. La conversión a int no redondea el número. Si desea redondear el uso Math.Round
mis caminos son:
- Convert.ToInt32(double_value)
- (int)double_value
- Int32.Parse(double_value.ToString());
¿No crees que la tercera forma es innecesariamente compleja y lenta? –
El tercero no funcionará con dobles con partes fraccionarias. por ejemplo, 'double_value = 0.1' –
Creo que puedes usar Math.Floor. – lindexi
creo que la mejor manera es Convert.ToInt32
.
Aquí es 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 cerca de hacer lo siguiente:
i = (int) Math.Round(x/y); // Line replaced
La mejor manera es simplemente usar Convert.ToInt32
. Es rápido y también se redondea correctamente.
¿Por qué hacerlo más complicado?
label8.Text = "" + years.ToString("00") + " years";
cuando se desea enviar a una etiqueta, o algo así, y no desea que cualquier componente fraccional, esta es la mejor manera
label8.Text = "" + years.ToString("00.00") + " years";
si desea con sólo 2, y siempre es así
int myInt = (int) Math.Ceiling (myDouble);
- 1. Convertir hexadecimal a doble
- 2. Convertir un doble a un int en Javascript sin redondeo
- 3. Convertir doble para Int, redondeado a la baja
- 4. Cómo convertir el número de Int a Número doble?
- 5. Cómo convertir int * a int
- 6. Redondear un doble a int
- 7. ¿Convertir ascii a int?
- 8. Convertir iterador a int
- 9. ¿Convertir int a cadena?
- 10. ¿Cómo convertir de forma segura este doble en un int?
- 11. convertir int color a int componentes
- 12. php convertir int formateado a int
- 13. lista <int> convertir a int []
- 14. Convertir cadena a doble - VB
- 15. (doble (^) (int)) foofoo
- 16. Convertir single-char a int
- 17. ¿Puedo convertir long a int?
- 18. Cómo convertir a entero int
- 19. Cómo convertir int [] a byte []
- 20. Java: charAt convertir a int?
- 21. convertir int a std :: string
- 22. SQL convertir INT a datetime
- 23. MySQL: Convertir INT a DATETIME
- 24. Convertir palabras (cadena) a Int
- 25. Cómo convertir int a QString?
- 26. Convertir 4 bytes a int
- 27. Cómo convertir entero a int?
- 28. Haskell Convertir entero a int?
- 29. Convertir cadena hexadecimal a int
- 30. Haskell: Convertir Int a cadena
define "mejor". depende si quiere redondeo arriba/abajo, etc. – RPM1984
@ RPM1984: Defina 'etc.' :) –
@Armen - touche' :) Realmente no importa de todos modos - Skeet está aquí, nada más importa. – RPM1984