如何在MySQL中将数字向下取整到最接近的整数?

104

如何在MySQL中将数值向下取整至最接近的整数?

例如:12345.7344 向下取整为 12345

MySQL 的 round() 函数是向上取整。

我不知道这些数值的长度和小数位数,可能是有10位数字和4位小数,也可能是有2位数字和7位小数。


你的例子并没有四舍五入到最近的整数! - iDevlop
1
@PatrickHonorez,您的评论是针对一个5年前的问题,并且似乎误解了问题。OP正在寻求一个将数字向下舍入到最近的整数的函数。 - Warren Sergent
@WarrenSergent 确实如此 :-/ - iDevlop
10个回答

148

使用FLOOR函数:

SELECT FLOOR(your_field) FROM your_table

谢谢。我一直在阅读round(),但它一直在我的眼前。 - d-_-b
好的,我已经删除了那条评论。我尝试过这个方法,当FLOOR()函数应用于两个子查询的差值(子查询的差值为-70.00)时,它返回了0。你以前见过这种情况吗? - tread

69

使用FLOOR()函数。

它会将你的十进制数舍入到较小的整数。例如:

SELECT FLOOR(1.9) /* return 1 */
SELECT FLOOR(1.1) /* return 1 */

其他有用的取舍

如果你想将小数四舍五入到最近的整数,请使用ROUND()。例如:

SELECT ROUND(1.9) /* return 2 */
SELECT ROUND(1.1) /* return 1 */

如果你想将小数四舍五入到最小的整数,请使用FLOOR()函数。例如:

SELECT CEILING(1.9) /* return 2 */
SELECT CEILING(1.1) /* return 2 */

Round() 函数对我有用。 - Swapnadeep Mukherjee

5

4

SUBSTR在某些情况下比FLOOR更好,因为FLOOR存在以下“漏洞”:

SELECT 25 * 9.54 + 0.5 -> 239.00

SELECT FLOOR(25 * 9.54 + 0.5) -> 238  (oops!)

SELECT SUBSTR((25*9.54+0.5),1,LOCATE('.',(25*9.54+0.5)) - 1) -> 239

3
我刚在MySQL 5.6.40上测试了SELECT FLOOR(25 * 9.54 + 0.5),结果返回239。 - Winter Dragoness

3

FLOOR()函数返回小于等于给定数字的最大整数值。

example :
SELECT FLOOR(columnName) FROM tableName;

2
可以通过以下两种方式实现:
  • select floor(desired_field_value) from table
  • select round(desired_field_value-0.5) from table
第二种方法的解释:假设有一个整数12345.7344,那么12345.7344 - 0.5 = 12345.2344,将结果四舍五入后得到12345。

1
如果您需要小数,可以使用这个。
DECLARE @Num NUMERIC(18, 7) = 19.1471985
SELECT FLOOR(@Num * 10000) / 10000

输出:19.147100 清除:985 添加:00

或使用此代码:

SELECT SUBSTRING(CONVERT(VARCHAR, @Num), 1, CHARINDEX('.', @Num) + 4)

输出:19.1471 清除:985


1

这两个查询在MySQL中用于将最近的整数向下取整

  1. SELECT FLOOR(445.6) ;
  2. SELECT NULL(222.456);

FLOOR()已经被发布为答案。你在哪里找到了NULL()函数? - forpas

1

试试这个,

SELECT SUBSTR(12345.7344,1,LOCATE('.', 12345.7344) - 1)

或者

SELECT FLOOR(12345.7344)

SQLFiddle演示


0
虽然你所问的与例子不符,但这个答案更相关于问题而不是答案本身。
SELECT Round(12345.7344/12345) * 12345;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接