代码之家  ›  专栏  ›  技术社区  ›  Bertram Gilfoyle

SQLite中的天花板和地板

  •  2
  • Bertram Gilfoyle  · 技术社区  · 7 年前

    什么是最干净的方法来找到 地板 数据库 ? 不幸的是,SQLite只有 ROUND() 作用

    2 回复  |  直到 7 年前
        1
  •  9
  •   Bertram Gilfoyle    7 年前

    公式

    Ceil: cast ( x as int ) + ( x > cast ( x as int ))
    取x的整数部分,如果十进制值大于0,则加1

    cast ( x as int ) - ( x < cast ( x as int ))
    取x的整数部分,如果十进制值小于0,则减去1


    例子

    Ceil:
    SELECT (cast ( amount as int ) + ( amount > cast ( amount as int ))) AS amount FROM SALES WHERE id = 128;
    楼层:
    SELECT (cast ( amount as int ) - ( amount < cast ( amount as int ))) AS amount FROM SALES WHERE id = 128;



    我已经用MySQL检查了所有的角落案例,包括负数 ceil() floor() 功能。

    Test result

        2
  •  7
  •   hyperTrashPanda    7 年前

    ROUND() 影响 CEIL FLOOR 如果你把手头的数字加上或减去0.5。我更喜欢这个,因为它的可读性更强。

    扩展Anees的示例:

    : SELECT ROUND(amount+0.5, 0) AS amount FROM SALES WHERE id = 128;
    : SELECT ROUND(amount-0.5, 0) AS amount FROM SALES WHERE id = 128;

    谢谢Anees在下面的评论,我也没有想到那个角落的案子。他的解决方案更加有力。

    推荐文章