【发布时间】:2017-07-26 15:52:09
【问题描述】:
在 MySQL 中,我想将数字四舍五入到最接近的十位。
例如812 -> 810,还有 819 -> 810
使用 ROUND 函数并不能解决问题。
【问题讨论】:
-
(嗯,这是基本算术)SELECT FLOOR(812/10)*10
-
你想对负输入发生什么?例如,-812 应该映射到什么? -820?还是-810?
在 MySQL 中,我想将数字四舍五入到最接近的十位。
例如812 -> 810,还有 819 -> 810
使用 ROUND 函数并不能解决问题。
【问题讨论】:
我会除以 10,做一个 floor() 然后乘以 10 以获得正确的 int 值。所以在 MySQL 中是这样的:
SELECT FLOOR(Myattribute / 10) * 10;
【讨论】:
你可以使用 TRUNCATE 函数如下:
SELECT TRUNCATE(819, -1);
SELECT TRUNCATE(812, -1);
Result:
810
【讨论】:
你仍然可以使用舍入函数,但将小数位指定为负数:
SELECT ROUND(812, -1)
【讨论】:
你可以使用"integer division" operator,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 |
+---------------------+---------------------------------------------+
【讨论】: