SQLite中的天花板和地板

slsn1g29  于 2022-12-13  发布在  SQLite
关注(0)|答案(3)|浏览(131)

SQLite中找到一个数的cielfloor的最简洁的方法是什么?不幸的是SQLite只有ROUND()函数。

mspsb9vt

mspsb9vt1#

公式

单元格:cast ( x as int ) + ( x > cast ( x as int ))

取x的整数部分,如果小数值大于0,则加1

楼层:cast ( x as int ) - ( x < cast ( x as int ))

取x的整数部分,如果小数值小于0,则减去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;
我已经用MySQL ceil()floor()函数检查了包括负数在内的所有极端情况。

wnvonmuf

wnvonmuf2#

如果你从手头的数字中加上或减去0.5,你可以使用ROUND()来达到CEILFLOOR的效果。我更喜欢这个,因为它更可读。
扩展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的评论,我也没有想到这个角落的情况。他的解决方案更健壮。

tgabmvqs

tgabmvqs3#

请访问https://www.sqlite.org/lang_mathfunc.html#ceil
显然,SQLite确实提供了上限:

ceil(X)
ceiling(X)

返回第一个大于或等于X的可表示整数值。对于X的正值,此例程向零的方向舍入。对于X的负值,此例程向零的方向舍入。
但是--遗憾的是,默认情况下并不编译它--并且只有在使用-DSQLITE_ENABLE_MATH_FUNCTIONS编译时选项编译合并时才是活动的。

相关问题