浮点数类型

浮点数类型

浮点数就是小数,包含 float 和 double 两种类型。

double 类型的精度值是 float 类型的两倍,这正是其名称”双精度”的由来。通常情况下都以 double 类型为主。

类型占用空间精度保证
float4 个字节最多保证前 7 位数字是准确的
double8 个字节最多保证前 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 类。

Previous:
Next:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注