Home >Backend Development >PHP Tutorial >mysql的float类型很奇怪的
我有个表 test,里面有三个字段,
uid,one,two,uid是int类型,自增,one字段是float(3,2) two字段是float(5,2).
按照道理one字段我可以插入 123.12 这样的数字对吧,也就是前面三位,后面两位
two字段我可以插入前面5位,后面两位吧,但是我插入一条
insert into test values(null,123.12,12345.12) 插入成功了,但是显示的数据则不一样,这是为什么呢
如果我需要插入数值 98.12,即前面2位,小数点两位,这个字段是应该设置成float类型吗
1、你定义错了
MySQL允许使用非标准语法:FLOAT(M,D)或REAL(M,D)或DOUBLE PRECISION(M,D)。这里,“(M,D)”表示该值一共显示M位整数,其中D位位于小数点后面。例如,定义为FLOAT(7,4)的一个列可以显示为-999.9999。MySQL保存值时进行四舍五入,因此如果在FLOAT(7,4)列内插入999.00009,近似结果是999.0001。
2、有精度要求应使用
DECIMAL和NUMERIC类型在MySQL中视为相同的类型。它们用于保存必须为确切精度的值,例如货币数据。当声明该类型的列时,可以(并且通常要)指定精度和标度;例如:
salary DECIMAL(5,2)
在该例子中,5是精度,2是标度。精度表示保存值的主要位数,标度表示小数点后面可以保存的位数。
1、你定义错了
MySQL允许使用非标准语法:FLOAT(M,D)或REAL(M,D)或DOUBLE PRECISION(M,D)。这里,“(M,D)”表示该值一共显示M位整数,其中D位位于小数点后面。例如,定义为FLOAT(7,4)的一个列可以显示为-999.9999。MySQL保存值时进行四舍五入,因此如果在FLOAT(7,4)列内插入999.00009,近似结果是999.0001。
2、有精度要求应使用
DECIMAL和NUMERIC类型在MySQL中视为相同的类型。它们用于保存必须为确切精度的值,例如货币数据。当声明该类型的列时,可以(并且通常要)指定精度和标度;例如:
salary DECIMAL(5,2)
在该例子中,5是精度,2是标度。精度表示保存值的主要位数,标度表示小数点后面可以保存的位数。
123456 保存在 DECIMAL(5,2) 就是 12345.00 当然就越界了
DECIMAL(5,2) 只能保存 -999.99 ~ 999.99
货币存储的时候必须要正数,这是什么道理
负数不行吗?表示欠款
要限制正数应该设置UNSIGNED属性。
建议用decimal字段表示