>  기사  >  백엔드 개발  >  mysql的float类型很奇怪的,该如何解决

mysql的float类型很奇怪的,该如何解决

WBOY
WBOY원래의
2016-06-13 11:58:59849검색

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是标度。精度表示保存值的主要位数,标度表示小数点后面可以保存的位数。


------解决方案--------------------
要限制正数应该设置UNSIGNED属性。
------解决方案--------------------
建议用decimal字段表示

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.