浮点数类型
浮点数就是小数,包含 float 和 double 两种类型。
double 类型的精度值是 float 类型的两倍,这正是其名称”双精度”的由来。通常情况下都以 double 类型为主。
| 类型 | 占用空间 | 精度保证 |
|---|---|---|
float | 4 个字节 | 最多保证前 7 位数字是准确的 |
double | 8 个字节 | 最多保证前 14 位数字是准确的 |
double pi = 3.14;
double r = 9.2;
double s = pi * r * r;
System.out.println("面积是:" + s);Code language: JavaScript (javascript)
浮点数字面值
浮点数的字面值默认都是 double 类型。浮点数的写法通常有两种:
- 小数形式:
3.14、0.618、0.23 - 科学计数法:
1.23E2、1.23e2、0.43E-2
其中 E 表示 10 的多少次方,1.23E2 就是 1.23 × 10² = 123。
默认的浮点直接量为 double 型,如果需要表示 float 类型的直接量,需要加 f 或 F 后缀:
float f1 = 3.14; // 编译错误,3.14 字面值是 double 类型,不能直接赋给 float 变量
float f1 = 3.14f; // 正确,加 f 标识为 float 类型Code language: JavaScript (javascript)
精度丢失问题
使用 float 或 double 类型存储时,要注意精度的问题。如果超出精度范围,就会丢失数据:
double pi = 3.14;
double r = 2.5;
double s = pi * r * r;
System.out.println(s);
double r2 = 1.23E102;
long l = 123L;
int i = 134;
float f = 1.45F;
float f2 = 1.456654544545454F;
System.out.println(f2); // 输出 1.4566545,超出精度的部分被截断Code language: JavaScript (javascript)
注意:浮点数存在精度误差,不能用于要求绝对精确的场景(如金融计算)。金额计算应使用
BigDecimal类。