SQLite 中的 CEIL 和 FLOOR

Ber*_*yle 6 sql sqlite rounding floor ceil

SQLite 中查找数字的cielfloor的最干净方法是什么?不幸的是 SQLite 只有功能。ROUND()

Ber*_*yle 9

公式

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

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


例子

天花板 :
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;



我已经用 MySQLceil()floor()函数检查了所有的极端情况,包括负数。

测试结果


hyp*_*nda 7

您可以使用ROUND()到的效果CEILFLOOR如果从数量上手加或减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 在下面的评论,我也没有想到那个角落案例。他的解决方案更加稳健。

  • 哇!我没有想到。但是,请注意,它并不总是有效。例如,`CEIL(1) = 1`,其中`ROUND(1+0.5, 0) = 2`。不过,如果该值不是整数,那就更好了。 (2认同)
  • 实数 ≥ 0 的 Ceil 和 Floor,请尝试使用 0.4999999999 而不是 0.5。 (2认同)