MySQL中无效浮点数的错误

Error for invalid floating-point numbers in MySQL

提问人:Ștefan Teodor 提问时间:9/2/2020 最后编辑:ShadowȘtefan Teodor 更新时间:9/2/2020 访问量:309

问:

引用 Alan Beaulieu 的 Learning SQL 第 3 版: “float(4,2) 列可以很好地处理数字 27.44 和 8.19,但数字 17.8675 将四舍五入为 17.87,并且尝试将数字 178.375 存储在 float(4,2) 列中将产生错误。”

为什么第一个示例会发生这种近似,而后一个示例不会发生这种近似?为什么 178.375 不是近似于 178.4 ?

MySQL 浮点 精度

评论


答:

1赞 Gordon Linoff 9/2/2020 #1

因为精度和刻度之间的差异。A 具有四位精度和 2 的小数位数。刻度是小数点后右边的数字。所以左边有地方。(巧合的是,在这种情况下,左边和右边有两个位置。float(4, 2)4 - 2 = 2

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

我应该指出,这是特定于MySQL的,我强烈反对使用它。相反,对固定长度的数字使用标准数据类型,称为 /。所以,使用 .float(p, s)numericdecimaldecimal(4, 2)

评论

0赞 Ștefan Teodor 9/3/2020
因此,2 的刻度意味着小数点右边的 2 个数字是强制性的,而不仅仅是允许的最大值,对吧?这就是为什么 178.4 是不允许的?
0赞 Gordon Linoff 9/3/2020
@ȘtefanTeodor . . .是的,就是这个想法。我的意思是“强制性”这个词不太正确。它基本上说,在四个位置中,有两个保留在小数点后的右边。