Mysql 浮点型入门

MySQL数据库支持两种浮点类型:单精度的FLOAT类型及双精度的DOUBLEPRECISION类型。这两种类型都是非精确的类型,经过一些操作后并不能保证运算的正确性,例如M*G/G不一定等于M,虽然数据库内部算法已经使其尽可能的正确,但是结果还会有偏差。国内某些财务软件在其数据库内使用FLOAT类型作为工资类型,个人觉得并不是一件值得推崇的事情

FLOAT类型用于表示近似数值数据类型。SQL标准允许在关键字FLOAT后面的括号内用位来指定精度(但不能为指数范围)。MySQL还支持可选的只用于确定存储大小的精度规定。0到23的精度对应FLOAT列的4字节单精度,24到53的精度对应DOUBLE列的8字节双精度。

MySQL允许使用非标准语法:FLOAT(M,D)或REAL(M,D)或DOUBLEPRECISION (M,D)。这里,(M,D)表示该值一共显示M位整数,其中D位是小数点后面的位数。例如,定义为FLOAT(7,4)的一个列可以显示为-999.9999。MySQL在保存值时会进行四舍五入,因此在FLOAT(7,4)列内插入999.00009的近似结果是999.0001。

MySQL将DOUBLE视为DOUBLE PRECISION(非标准扩展)的同义词,将REAL视为DOUBLE PRECISION(非标准扩展)的同义词。若将MySQL服务器的模式设置为REAL_AS_FLOAT,那这时REAL将被视为FLOAT类型。

为了保证最大的可移植性,需要使用近似数值数据值存储的代码,使用FLOAT或DOUBLE PRECISION,并不规定精度或位数。

CREATE TABLE temp2
(
    id  FLOAT(10, 2),
    id2 DOUBLE(10, 2),
    id3 DECIMAL(10, 2)
);

INSERT INTO temp2
VALUES (1234567.21, 1234567.21, 1234567.21),
       (9876543.21, 9876543.12, 9876543.12);

select * from temp2;
id	id2	id3
1234567.25	1234567.21	1234567.21
9876543.00	9876543.12	9876543.12

思考
为何float的值与插入的不一样?

总结

  • float和double为非精确类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值