您的位置:首页 > 编程语言 > Java开发

[Java 数值] 数值类型之间的转换

2017-04-11 21:03 190 查看

数值类型之间的转换

在程序运行时,经常需要将一种数值类型转换为另一种类型。下图给出了数值类型之间的合法转换。



图中有6个实心箭头,表示无信息丢失的转换;

有3个虚箭头,表示可能有精度损失的转换。

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

如果两个操作数(n,f)进行二元操作时,先要将两个操作数转换为同一种类型,然后再进行计算。

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

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

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

否则,两个操作数都将被转换为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类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: