4. 数值类型: DECIMAL(M,N) 或 DECIMAL(M)
4.1 存储位计算
最小分配4个字节空间,比如decimal(4,2),实际用两个字节就可以表示.但MYSQL在分配空间时还是用了4个字节.空闲部分用0填充
DECIMAL(M,N),如果9
(这里为什么要这样算,详见4.2中的实例解释)
4.2 如何读取数据.
4.2.1 读取步骤
按照定义,从磁盘读出该DECEMAL字段的所有数据(N位)后:
4.2.1.1 正数,带小数,DECIMAL(4,2)
0)以1开头,如果定义为UNSIGNED,则都为1
1)去掉第一位符号位,
2)用小数将剩余的位数分开, 前面(M位)是整数部分,后面(N位)是小数部分
(在这一步是怎么分M和N的,我们能根据字段的定义计算出来)
3)去掉小数点后面(整个字节)为0的情况,
4)将二进制转换成十进制,即可读出原值.
(注意,小数的读取方法与整数的方法一样,按二进制向十进制转换即可)
4.2.1.2 负数,带小数 DECIMAL(4,2)
0)以0开头,
1)去掉第一位符号位,
2)剩余的数取反+1 ,
3)用小数将剩余的位数分开, 前面(M位)是整数部分,后面(N位)是小数部分
(在这一步是怎么分M和N的,我们能根据字段的定义计算出来)
4)去掉小数点后面(整个字节)为0的情况,
5)将二进制转换成十进制,即可读出原值.
(注意,小数的读取方法与整数的方法一样,按二进制向十进制转换即可)
4.2.1.3 正数,不带小数, DECIMAL(N)
0)以1开头,如果定义为UNSIGNED,则都为1
1)去掉第一位符号位,
2)将剩余的数位直接按二进制向十进制转换即可