# 基本数据类型 float 和 double 的区别
float:单精度浮点数
double:双精度浮点数默认
# 两者的主要区别如下:
在内存中占有的字节数不同
单精度浮点数在机内存占 4 个字节
双精度浮点数在机内存占 8 个字节
有效数字位数不同
单精度浮点数有效数字 8 位
双精度浮点数有效数字 16 位
数值取值范围
单精度浮点数的表示范围:-3.40E + 38 ~ 3.40E + 38
双精度浮点数的表示范围:-1.79E + 308 ~ -1.79E + 308
在程序中处理速度不同
一般来说,CPU 处理单精度浮点数的速度比处理双精度浮点数快
如果不声明,默认小数位 Double 类型,所以如果要用 Float 的话,必须进行强转。
例如:float a = 1.3; 会编译报错,正确写法:float a = (Float) 1.3; 或者 float a = 1.3f;
(f 或 F 不区别大小写)
<font style="color:red"> 注意 </font>:float 是 8 位有效数字,第 7 位数字将会四舍五入。
# 面试题:
Java 中 3 * 0.1 == 0.3 将会返回什么? true 还是 false
答:false,因为浮点数不能完全精确的表示出来,一般会损失精度
Java 中 float f = 3.4; 是否正确
答:不正确 3.4 是双精度数,将双精度型 (double) 赋值给浮点型 (float) 属于向下转型会造成精度损失,因此需要强制类型转换 float f = (float) 3.4 或者写成 float f = 3.4f;