mysql 中的 round 工作得不太好
round 函数有时不能很好地工作。我的数据库中有这样的一行:
field_1= 375
field_2= 0.65
field_3= 0.1
field_4= 11
所以我们知道: field_1*field_2*field_3*field_4 = 268.125 所以如果我将其四舍五入到 2 位小数 -> 268.13。
但在 mysql 中我得到 268.12 ->从我的表中选择 round(field_1*field_2*field_3*field_4) -> 268.12
这种情况只会发生在这些值上,我尝试使用其他数字,这一轮工作没有问题。
关于它的任何解决方法。我在 mysql 4.1.22 和 5.1.44 中尝试过,但遇到了同样的问题。我在其他论坛中阅读 http://bugs.mysql.com/bug.php?id= 6251 认为这不是一个错误,他们说这取决于 C 库的实现。
The round function sometime doesn't work very well. I have in my db a row like this:
field_1= 375
field_2= 0.65
field_3= 0.1
field_4= 11
So we know that: field_1*field_2*field_3*field_4 = 268.125 so if I round it to 2 decimals -> 268.13.
But in mysql I got 268.12 -> Select round(field_1*field_2*field_3*field_4) from my table -> 268.12
This situation just happens with these values, I tried with other numbers and no problem the round works.
Any workaround about it. I tried in mysql 4.1.22, and 5.1.44 and I get the same issue. I read in other forum http://bugs.mysql.com/bug.php?id=6251 that it is not a bug, they said that it depends on the C library implementation.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这些列使用什么数据类型?
如果您想要精确的精度,那么您应该使用
NUMERIC
或DECIMAL
,而不是FLOAT
、REAL
或双
。来自手册:
What data type are you using for those columns?
If you want exact precision then you should use
NUMERIC
orDECIMAL
, notFLOAT
,REAL
, orDOUBLE
.From the manual:
如果适用,您可以使用
FLOOR()
如果不适用,您最好在应用程序端处理此问题。即对应用程序端进行整个计算,然后进行舍入,或者仅对应用程序端进行舍入。
从我的表中选择 (field_1*field_2*field_3*field_4) AS myCalculation
If applicable you can use
FLOOR()
If not applicable you will be better off handling this on the application side. I.e. do the entire calculation application side and then round, or just round application side.
SELECT (field_1*field_2*field_3*field_4) AS myCalculation FROM my table