首页 > 代码库 > 浮点数与定点
浮点数与定点
浮点数
说明:小数点左边,能大到多少?
小数点右边,又能大到多少?
小数型
float(M),decimal(M,D)
M叫“精度”---->代表总位数(不包含点),而D是标度,代表小数位(小数右边的位数)
例:
float(6,2) ------> -999999.99到9999.99
在该例子中6是M(精度)2是D(标度)
mysql> create table salary(
mysql> sname varchar(30) not null default ‘‘,
mysql> gongzi float(6,2)
mysql> )engine myisam charset utf8;
mysql> inset into salary values (‘zhangsan‘,-3200.78),(‘lisi‘,720.3);
msyql> select * from salary;
+----------+----------+
| sname | gongzi |
+----------+----------+
| zhangsan | -3200.78 |
| lisi | 720.30 |
+----------+----------+
插入一个奖金列
mysql> alter talbe salary add bonus float(5,2) unsigned not null default 0.00;
mysql> insert into selary (sname,bonus) values (‘zhaoliu‘,784.32);
mysql> select * from salary;
+----------+----------+--------+
| sname | gongzi | bonus |
+----------+----------+--------+
| zhangsan | -3200.78 | 0.00 |
| lisi | 720.30 | 0.00 |
| zhaoliu | NULL | 784.32 |
+----------+----------+--------+
bonsu加了unsigned类型,不能为负
用来表示数据中的小数,除了float---浮点
还有一种叫定点,decimal定点是把整数部分和小数部分,分开存储
比float精确
下面建一个账户的表来验证float与decimal的区别
mysql> create table account(
mysql> id int not null default 0,
mysql> acc1 float(9,2) not null default 0.00,
mysql> acc2 decimal(9,2) not null default 0.00
mysql> )engine myisam charset utf8;
mysql> insert into account values (1,1234567.23,1234567.23);
mysql> select * from account;
+----+------------+------------+
| id | acc1 | acc2 |
+----+------------+------------+
| 1 | 1234567.25 | 1234567.23 |
+----+------------+------------+
我们会发现这两个数字后面的小数会不一样
通过上例可以看出float有时会损失精度,
如果像账户这样敏感的字段,建议用decimal
mysql> insert into account values (2,1234567.24,17894561.23);
mysql> select * from account;
+----+------------+------------+
| id | acc1 | acc2 |
+----+------------+------------+
| 1 | 1234567.25 | 1234567.23 |
| 2 | 1234567.25 | 9999999.99 |
+----+------------+------------+
出现上面这种情况是因为我们acc2定义的数字超过了decimal这个类型的最大值
本文出自 “不变的时光” 博客,转载请与作者联系!