# 基本数据类型 float 和 double 的区别

float:单精度浮点数

double:双精度浮点数默认

# 两者的主要区别如下:

  1. 在内存中占有的字节数不同

    单精度浮点数在机内存占 4 个字节

    双精度浮点数在机内存占 8 个字节

  2. 有效数字位数不同

    单精度浮点数有效数字 8 位

    双精度浮点数有效数字 16 位

  3. 数值取值范围

    单精度浮点数的表示范围:-3.40E + 38 ~ 3.40E + 38

    双精度浮点数的表示范围:-1.79E + 308 ~ -1.79E + 308

  4. 在程序中处理速度不同

    一般来说,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 位数字将会四舍五入。

    # 面试题:

    1. Java 中 3 * 0.1 == 0.3 将会返回什么? true 还是 false

      答:false,因为浮点数不能完全精确的表示出来,一般会损失精度

    2. Java 中 float f = 3.4; 是否正确

      答:不正确 3.4 是双精度数,将双精度型 (double) 赋值给浮点型 (float) 属于向下转型会造成精度损失,因此需要强制类型转换 float f = (float) 3.4 或者写成 float f = 3.4f;