Skip to content

Latest commit

 

History

History
107 lines (72 loc) · 2.2 KB

File metadata and controls

107 lines (72 loc) · 2.2 KB

浮点数类型和定点数类型

当数据带有小数部分时,就需要使用浮点数类型或定点数类型。它们都能表示小数,但底层存储方式和精度表现并不相同。

MySQL 中常见的这类类型有:

  • FLOAT
  • DOUBLE
  • DECIMAL

FLOAT类型

FLOAT 是单精度浮点数,适合对精度要求不高、但更关注存储空间和速度的场景。

常见场景:

  • 温度
  • 身高体重
  • 近似统计值

示例:

CREATE TABLE weather (
  id int NOT NULL AUTO_INCREMENT,
  temperature float DEFAULT NULL,
  PRIMARY KEY (id)
);

需要注意,FLOAT 在计算和存储时可能出现精度误差,因此不适合保存金额等精确数据。

DOUBLE类型

DOUBLE 是双精度浮点数,精度和范围都比 FLOAT 更高。

常见场景:

  • 科学计算
  • 更大范围的近似数值
  • 对误差容忍度稍低但仍不要求绝对精确的业务

示例:

CREATE TABLE position_log (
  id int NOT NULL AUTO_INCREMENT,
  longitude double NOT NULL,
  latitude double NOT NULL,
  PRIMARY KEY (id)
);

DOUBLEFLOAT 更精确,但本质上仍然是浮点数,也可能存在精度问题。

DECIMAL类型

DECIMAL 是定点数类型,适合要求精确计算的场景。

最典型的场景就是:

  • 金额
  • 账务数据
  • 税率
  • 结算数据

语法通常写为:

DECIMAL(M, D)

其中:

  • M 表示总位数
  • D 表示小数位数

例如:

CREATE TABLE account (
  id int NOT NULL AUTO_INCREMENT,
  balance decimal(10,2) NOT NULL DEFAULT 0.00,
  PRIMARY KEY (id)
);

这里的 decimal(10,2) 表示总共 10 位,其中 2 位是小数位,也就是最多能表示 8 位整数加 2 位小数。

如何选择

选择规则可以概括为:

  1. 金额和精确计算,优先使用 DECIMAL
  2. 对精度要求不高的普通小数,可使用 FLOAT
  3. 范围更大、精度略高的近似小数,可使用 DOUBLE

例如:

  • 商品价格:DECIMAL(10,2)
  • 经纬度:DOUBLE
  • 体温记录:FLOAT

小结

FLOATDOUBLE 是近似值,DECIMAL 是精确值。只要涉及金额、结算、财务、积分等不能容忍误差的业务,应该优先使用 DECIMAL