我正在学习MySQL,并且在float
的范围和精度方面有问题。MySQL浮点类型范围和精度混淆
从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
在mannual意思? - 我可以毫无问题地执行
insert into test values (1e38);
。即使我输入38
数字,它仍然有效。但39
数字或1e39
将失败。那么这个38
的含义是什么? - 如何检查
f_a
的型号转换?当我执行desc test;
时,f_a
的类型仍然是float
,即使我在该列中插入了38
数字编号。 - 那么,范围和精度地球上有什么区别?
优秀的答案,但也很好的建议是*除非你有这样做的一个具体的,告知理由不使用这些数据类型* - 这些类型存储*近似*值,并且偏好范围超过精度。使用'DECIMAL'通常是你想要的。浮动和双打肯定是不准确的。如果你计算金钱,'DECIMAL'数据类型是唯一可接受的类型。 –
@ Michael-sqlbot好点!许多tks先生博特:D – spacegoing