【问题标题】:How can I round a number down to the nearest 10?如何将数字四舍五入到最接近的 10?
【发布时间】:2017-07-26 15:52:09
【问题描述】:

在 MySQL 中,我想将数字四舍五入到最接近的十位。

例如812 -> 810,还有 819 -> 810

使用 ROUND 函数并不能解决问题。

【问题讨论】:

标签: mysql rounding


【解决方案1】:

我会除以 10,做一个 floor() 然后乘以 10 以获得正确的 int 值。所以在 MySQL 中是这样的:

SELECT FLOOR(Myattribute / 10) * 10;

【讨论】:

    【解决方案2】:

    你可以使用 TRUNCATE 函数如下:

    SELECT TRUNCATE(819, -1);
    SELECT TRUNCATE(812, -1);
    
    Result:
    810
    

    【讨论】:

    • 如果是10000的倍数呢?像 15332,输出应该是 10000,如果是 50345,那么它应该是 50000...我们怎样才能做到这一点?
    • 嗨@JGS,您只需将 -1 更改为 -4 SELECT TRUNCATE(15332, -4);
    【解决方案3】:

    你仍然可以使用舍入函数,但将小数位指定为负数:

    SELECT ROUND(812, -1)
    

    【讨论】:

      【解决方案4】:

      你可以使用"integer division" operatorDIV

      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                         |
      +---------------------+---------------------------------------------+
      

      【讨论】:

        猜你喜欢
        • 2011-03-21
        • 1970-01-01
        • 2013-08-31
        • 2017-05-03
        • 2010-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多