Conversión legal entre tipos numéricos
1. Las flechas sólidas en la figura indican conversiones sin pérdida de información y las flechas discontinuas indican conversiones con posible pérdida de precisión.
P.ej
int a = 123456789;
flotar b = a; // b = 1.23456792E8
2. Cuando utilice los dos cálculos anteriores, debe convertir el tipo numérico al mismo para calcular:
- Si uno de los dos operandos es doble, el otro se convertirá en doble
- De lo contrario, si uno de los dos operandos es flotante, el otro se convertirá en flotante
- De lo contrario, si uno de los dos operandos es largo, el otro se convertirá en largo.
- De lo contrario, ambos operandos se convertirán al tipo int
Conversión de tipo forzada
La conversión de tipo forzada, como double a int, puede perder información.
La sintaxis de la conversión de tipo forzada es proporcionar el tipo de destino que desea convertir entre paréntesis, seguido del nombre de la variable a convertir. P.ej:
double c = 9.993;
int d = (int)c;//9
d为9,强制类型转换通过截取小数点部分将浮点型【包括单精度和双精度】转换成整型。
Si desea redondear el tipo de punto flotante para obtener el tipo de entero más cercano, en este caso, debe usar el método Math.round:
double c = 9.993;
int d = (int)Math.round(c);//10
Ahora el valor de d es 10. Cuando se usa round, todavía se necesita una conversión de tipo forzada. Debido a que el tipo devuelto por el método round es de tipo largo, debido a la posibilidad de pérdida de información, el tipo largo solo se puede convertir por conversión forzada de tipo explícito. Convertido a tipo int.
Advertencia: Si intenta forzar un valor de un tipo a otro y excede el rango del tipo de destino, el resultado se truncará a un valor completamente diferente. Por ejemplo, el valor real de (byte) 300 es 44