经常需要将一种数值类型转换为另一种数值类型。下图就是各数值类型之间的合法转换


int转换保留两位小数 java java int转float_强制类型转换

例如,123 456 789是一个大整数,它所包含的位数比float类型所能表达的位数多,当将这个整型数值转换为float类型时,将会得到同样大小的结果,但却失去了一定的精度。

int n= 123456789;
float f = n; //f is 1.23456792E8

使用上面两个数值进行二元操作时(n+f,n是整数,f是浮点数),f是浮点数,先要将两个操作数转换为同一种类型,然后才进行计算。

如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型。

否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型。

否则,如果其中一个操作数是long类型,另一个操作数将会转换为float类型。

否则,两个操作数都将被转换为int类型。 

强制类型转换

    上面的内容中可以看到,必要的时候,int类型的值将会自动转换为double类型,但另一方面,有时也需要将double转换成int。在java中,允许进行这种数值之间的类型转换。当然,有可能会丢失一些信息。这种情况下,需要通过强制类型转换(cast)实现这个操作。强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟带转换的变量名。例如:

double x = 9.997;
    int nx = (int) x;

    这样,变量nx的值为9.强制类型转换通过截断小数部分将浮点值转换为整型。

    如果想对浮点数进行舍入运算,得到最接近的整数(在很多情况下,这种操作更有用),那就需要使用Math.round方法:

double x = 9.997;
    int nx = (int)Math.round(x);

    现在nx值为10。调用round的时候,仍然需要使用强制类型转换(int)。其原因是round方法返回的结果为long类型,由于存在信息丢失的可能性,所以只有使用显式的强制类型转换才能够将long类型转换成int类型。

  警告:如果视图将某数值从一种类型强制转换为另一种类型,而又超出目标类型的表示范围,结果就会截断成一个完全不同的值。例如,(byte)300实际值为44。