【发布时间】:2023-04-01 20:08:01
【问题描述】:
我正在学习 MySQL,但对 float 的范围和精度有疑问。
来自mannual:
对于 FLOAT,SQL 标准允许在括号中的关键字 FLOAT 后面以位为单位指定精度(但不是指数范围)的可选规范。 MySQL 也支持这个可选的精度规范,但精度值仅用于确定存储大小。从 0 到 23 的精度会产生一个 4 字节的单精度 FLOAT 列。从 24 到 53 的精度会产生一个 8 字节的双精度 DOUBLE 列。
我使用这个命令创建了一个表
create table test (f_a float(23));
我有 4 个困惑:
- 手册中
but not the range of the exponent是什么意思? - 我可以毫无问题地执行
insert into test values (1e38);。即使我输入38数字它仍然有效。但是39数字或1e39会失败。那么这个38是什么意思呢? - 如何检查
f_a的类型转换?当我执行desc test;时,f_a的类型仍然是float,即使我在该列中插入了38数字。 - 那么,range和precision到底有什么区别呢?
【问题讨论】:
-
下面的答案很好,但还有一个很好的建议是不要使用这些数据类型,除非你有特定的、知情的理由这样做——这些类型存储 近似值,并且偏爱范围而不是精度。使用
DECIMAL通常是您想要的。浮点数和双精度数必然是不精确的。如果您在计算金钱,DECIMAL数据类型是唯一可接受的类型。 -
@Michael-sqlbot 好点!许多 tks Mr. Bot:D
标签: mysql floating-point