MySQL数值类型——FLOAT、DOUBLE和DECIMAL类型

     MySQL支持的三个浮点类型是FLOAT、DOUBLE和DECIMAL类型。FLOAT数值类型用于表示单精度浮点数值,而DOUBLE数值类型用于表示双精度浮点数值。

  与整数类型一样,这些类型也带有附加参数:一个显示宽度指示器和一个小数点指示器。例如,语句FLOAT (5,2)规定显示的值不会超过5位数字,小数点后面带有2位数字。看下面的示范举例:

mysql> insert into data values (876.90);
Query OK, 1 row affected (0.03 sec)

mysql> insert into data values (-5.2);
Query OK, 1 row affected (0.03 sec)

mysql> insert into data values (-12345.789);
ERROR 1264 (22003): Out of range value for column 'price' at row 1

 mysql> insert into data values (-1234.789);
ERROR 1264 (22003): Out of range value for column 'price' at row 1


  对于小数点后面的数字个数超过了允许的数目的值,系统会自动将它四舍五入为最接近它的值,然后插入它。下面的例子演示了这一点:

mysql> insert into data values (-14.789);
Query OK, 1 row affected (0.03 sec)
mysql> insert into data values (-141.789);
Query OK, 1 row affected (0.03 sec)

mysql> select * from data;
+---------+
| price   |
+---------+
|   13.60 |
|  876.90 |
|   -5.20 |
|  -14.79 |
| -141.79 |
+---------+
5 rows in set (0.00 sec) 





  DECIMAL数据类型用于要求非常高的精确度的计算中,这些类型允许指定数值的精确度和计数方法作为选择参数。精确度在这里是指为这个值保存的有效数字的总个数,而计数方法表示小数点后数字的个数。例如,语句DECIMAL (5,2)规定了存储的值将不会超过5位数字,开且小数点后面有2位数字。看下面的示范举例:

MySQL数值类型——FLOAT、DOUBLE和DECIMAL类型

  MySQL在内部把DECIMAL数据类型存储为字符串,更精确地保留它们的值。

  忽略DECIMAL数据类型的精确度和计数方法修饰符将会使MySQL把所有标识为这个类型的字段的精确度默认为10,计算方法默认为0:

MySQL数值类型——FLOAT、DOUBLE和DECIMAL类型

  UNSIGNED和ZEROFILL修饰符也可以被FLOAT、DECIMAL和DOUBLE数据类型接受,它们的结果和前一节中描述的一样。

### MySQL 中 `FLOAT`、`DOUBLE` 和 `DECIMAL` 数据类型的区别 #### 存储方式与精度 - **`FLOAT` 类型**:采用单精度浮点数表示,占用4个字节。该类型能够提供大约7位有效数字的精度[^3]。由于其内部使用IEEE标准来表达数值,在某些情况下可能会引入舍入误差。 - **`DOUBLE` 类型**:双精度浮点数形式,占据8个字节的空间,可以支持高达15到17位的有效数字精度[^1]。 - **`DECIMAL(M,D)` 或者 `NUMERIC(M,D)` 类型**:这是一种固定长度的小数类型,其中 M 表示总的位数(包括整数部分和小数部分),D 则指定了小数点后的位数。这种类型存储取决于定义时指定的最大宽度加上两个额外字节用于记录符号和其他信息[M+2][^2]。它能确保精确度不会丢失,并且非常适合处理货币金额或其他不允许有任何近似的情况。 #### 性能差异 当涉及到大量计算操作时,`FLOAT` 和 `DOUBLE` 可能会比 `DECIMAL` 更高效,因为硬件通常优化了对这两种浮点数的操作速度;然而,这并不意味着总是如此——具体表现还依赖于实际的应用环境以及所使用的数据库引擎版本等因素。 #### 应用场景 - 对于那些不需要绝对准确性但追求更高效率的应用程序来说,可以选择 `FLOAT` 或者 `DOUBLE` 来保存科学测量值或者其他非金融性质的数据集。 - 如果应用程序涉及财务报表、会计账目等需要严格控制四舍五入错误的地方,则应优先考虑使用 `DECIMAL` 类型以保持数据的一致性和可靠性[^5]。 ```sql CREATE TABLE financial_records ( id INT AUTO_INCREMENT PRIMARY KEY, amount DECIMAL(10, 2) NOT NULL -- 储存金额,最多有两位小数 ); INSERT INTO financial_records(amount) VALUES (1234.56); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值