decimal
decimal( p, d )
其中 p 的取值范围为 1- 65, d 的取值范围为0 - 30;
默认不写的话 decimal () 中p =10,d = 0;
写上一个的话 decimal (5)表示 d = 5;
p 代表的是数的有效长度(整数和小数位之和),d 代表的是精度(小数点后的位数)
必须满足p >= d;
举例
create table t1 (num decimal(3,1));
insert into from t1 values(1.21);
select * from t1;
结果为1.2 (因为 d = 1 要求小数点后是一位数,所以不是 1.21,结果的有效位数为 2< p,符合要求,故为 1.2)
insert into from t1 values(12.1);
结果为 12.1 符合要求 p = 3, d = 1;
insert into from t1 values(12.1212)
结果为 12.1;虽然看起来位数大于 p,实际上小数点后遵循四舍五入,0.1212 保留一位小数值为 0.1
故 12.1212 取值符合要求。
insert into from t1 values(12.5656)
结果为 12.6,小数点后遵循四舍五入,0.5656 保留一位小数值为 0.6
故 12.5656 取值符合要求。
insert into from t1 values(121.1)
121.1 有效位数为 4 > 3,不符合要求。
insert into from t1 values(121.0)
121.0 有效位数为 4 > 3,不符合要求。
insert into from t1 values(121)
121 的没有小数部分,不满足 d = 1,不符合要求。
insert into from t1 values(12)
结果为 12.0 符合要求,题目要求小数点后有一位,是整数的话且整数位+小数位 <= p ,小数点后补 0。
insert into from t1 values(1)
结果为 1.0 符合要求,题目要求小数点后有一位,整数位 + d < p ,小数点后补 0,补 1 位(因为 d = 1)。
有些绕,希望帮助大家。