如何将数字向下舍入到最接近的十位?

6
在MySQL中,我希望能将数字向下舍入到最接近的十位数。
例如:812 -> 810,同时819 -> 810
使用ROUND函数无法实现此功能。

3
(嗯,这是基本算术)SELECT FLOOR(812/10)*10 - Strawberry
https://dev59.com/o2ct5IYBdhLWcg3wFpm1 - b2ok
负数输入时您希望发生什么?例如,-812应该映射到什么?-820?还是-810? - Mark Dickinson
5个回答

8

我会先除以10,然后使用floor()函数向下取整,再乘以10得到正确的整数值。在MySQL中可以这样实现:

SELECT FLOOR(Myattribute / 10) * 10;

8
您可以使用以下方式使用TRUNCATE函数:
SELECT TRUNCATE(819, -1);
SELECT TRUNCATE(812, -1);

Result:
810

如果是10000的倍数呢?比如15332,输出应该是10000,如果是50345,则应该是50000...我们该如何实现这个功能? - JGS
2
嗨@JGS,你只需要将-1改为-4即可。SELECT TRUNCATE(15332, -4); - justMe

6

您仍然可以使用round函数,但需要将小数位指定为负数:

SELECT ROUND(812, -1)

0

在PHP中,我想将数字舍入到最接近的十位数字。例如,2013 -> 2010,同时也是2019 -> 2010。以下方法适用于我:

$number = 2019;
echo(round($number -5,-1) . "<br>");

0

您可以使用"整数除法"运算符, DIV:

SELECT 812 DIV 10 * 10;

虽然TRUNCATE()似乎是将数字“舍入”到10、100等的更好选项,但DIV也可以用于将数字“舍入”到其他值,例如分钟:

SELECT NOW(), FROM_UNIXTIME(UNIX_TIMESTAMP() DIV 60 * 60);

+---------------------+---------------------------------------------+
| NOW()               | FROM_UNIXTIME(UNIX_TIMESTAMP() DIV 60 * 60) |
+---------------------+---------------------------------------------+
| 2020-03-17 13:51:35 | 2020-03-17 13:51:00                         |
+---------------------+---------------------------------------------+

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