MySQL中的无效浮点数错误

MySQL中的无效浮点数错误,mysql,floating-point,precision,Mysql,Floating Point,Precision,引用Alan Beaulieu的学习SQL第三版: “浮点(4,2)列可以很好地处理数字27.44和8.19,但数字17.8675将四舍五入到17.87,尝试将数字178.375存储在浮点(4,2)列中会产生错误。” 为什么第一个例子会出现这种近似,而后一个例子却没有?为什么178.375不能近似于178.4?因为精度和刻度之间的差异。浮点(4,2)有四位精度和2的刻度。刻度是小数点右边的数字。因此,左边有4-2=2个位置。(在这种情况下,左侧和右侧有两个位置是巧合。) 数值为178。左侧有三个

引用Alan Beaulieu的学习SQL第三版: “浮点(4,2)列可以很好地处理数字27.44和8.19,但数字17.8675将四舍五入到17.87,尝试将数字178.375存储在浮点(4,2)列中会产生错误。”


为什么第一个例子会出现这种近似,而后一个例子却没有?为什么178.375不能近似于178.4?

因为精度和刻度之间的差异。浮点(4,2)有四位精度和2的刻度。刻度是小数点右边的数字。因此,左边有
4-2=2
个位置。(在这种情况下,左侧和右侧有两个位置是巧合。)

数值为178。左侧有三个值。没有足够的职位给他们。因此出现了错误


我应该注意到,
float(p,s)
是MySQL特有的,我强烈反对使用它。相反,对于固定长度的数字,使用标准数据类型,称为
数值
/
十进制
。所以,使用
十进制(4,2)

那么2的刻度意味着十进制右边的2个数字是必须的,而不仅仅是允许的最大值?这就是为什么178.4不被允许?@tefantedoor。是的,就是这个想法。我的意思是“强制性”这个词不太合适。它基本上说,四位中有两位保留在小数点后的右边。