每一年都奔走在自己de热爱里

愿你天黑有灯,下雨有伞

【Java开发】 在 Java 中 对于float 和 double 数据类型的解释

1. float 类型🔷

  • 含义float 属于单精度浮点数类型,用于表示小数。
  • 存储大小:它占用 32 位(4 个字节)的内存空间。
  • 精度:大约能提供 7 位十进制数的精度。
  • 表示范围:大约是 1.4×10−45 到 3.4×1038
  • 示例代码

 

---java---
public class FloatExample {
    public static void main(String[] args) {
        // 定义一个 float 类型的变量,需要在数字后面加上 f 或 F
        float num = 3.1415926f; 
        System.out.println("float 类型的变量值: " + num);
    }
}

 

在上述代码中,num 是一个 float 类型的变量,由于 Java 默认把小数当作 double 类型处理,所以在定义 float 类型的变量时,要在数字后面加上 f 或者 F

2. double 类型🔷

  • 含义double 属于双精度浮点数类型,同样用于表示小数。
  • 存储大小:它占用 64 位(8 个字节)的内存空间。
  • 精度:大约能提供 15 到 16 位十进制数的精度。
  • 表示范围:大约是 4.9×10−324 到 1.8×10308
  • 示例代码

 

---java---
public class DoubleExample {
    public static void main(String[] args) {
        // 定义一个 double 类型的变量
        double num = 3.14159265358979; 
        System.out.println("double 类型的变量值: " + num);
    }
}

 

#在上述代码中,num 是一个 double 类型的变量,Java 默认把小数当作 double 类型处理,所以在定义 double 类型的变量时,无需添加额外的后缀。

精度说明🔺

float 和 double 类型的变量并非能精确表示所有小数,它们是基于 IEEE 754 标准来存储浮点数的,这就意味着在某些情况下会存在舍入误差。如果你需要进行精确的小数计算,比如金融计算,建议使用 BigDecimal 类。
 

3.附: 部分知识扩展🔷

 

  当说 float 类型大约能提供 7 位十进制数的精度时,意味着在正常情况下,float 类型可以相对准确地表示和存储包含大约 7 位有效数字的十进制小数。以下从几个方面来深入理解:

(1)有效数字的概念🔺

有效数字是指一个数中从左边第一个非零数字起,到精确到的位数止,所有的数字都叫做这个数的有效数字。例如:

 

  • 3.14159 有 6 位有效数字。
  • 0.00314 有 3 位有效数字,前面的零不算有效数字。

(2)float 精度的体现🔺

当一个小数的有效数字在 7 位左右时,float 类型通常能较准确地存储和表示这个数。但如果有效数字超过 7 位,就可能会出现精度丢失的情况。下面通过代码示例来直观展示:

 

---java---
public class FloatPrecisionExample {
    public static void main(String[] args) {
        // 有效数字 7 位左右
        float num1 = 3.141592f;
        System.out.println("有效数字 7 位左右: " + num1);

        // 有效数字超过 7 位
        float num2 = 3.1415926535f;
        System.out.println("有效数字超过 7 位: " + num2);
    }
}

 

在上述代码中,num1 的有效数字大约为 7 位,float 类型可以较准确地存储和输出该值;而 num2 的有效数字超过了 7 位,在存储和输出时就可能会出现精度丢失的情况。

(3 )精度丢失的原因🔺

float 类型采用 IEEE 754 单精度浮点数标准来存储数据,它使用 32 位(4 个字节)来表示一个浮点数,其中 1 位用于表示符号,8 位用于表示指数,剩下的 23 位用于表示尾数。由于存储位数有限,当要表示的小数的有效数字过多时,就无法精确存储,从而导致精度丢失。

(4)与 double 精度对比🔺

double 类型大约能提供 15 - 16 位十进制数的精度,它使用 64 位(8 个字节)来存储浮点数,其中 1 位用于表示符号,11 位用于表示指数,52 位用于表示尾数。相比 float 类型,double 类型能表示更精确的小数,因为它有更多的位数来存储尾数。例如:

 

---java---
public class DoublePrecisionExample {
    public static void main(String[] args) {
        // 用 double 存储有效数字超过 7 位的数
        double num = 3.14159265358979;
        System.out.println("double 存储有效数字超过 7 位的数: " + num);
    }
}
 
在上述代码中,double 类型可以更准确地存储和输出有效数字超过 7 位的小数。
 
posted @ 2025-03-22 16:08  一念6  阅读(463)  评论(0)    收藏  举报