在SQLite中获取数字的ceil值
因此,我看到了一个很好的答案,但我希望无论如何都向上取整,而不是无论如何向下取整。例如,在强制转换int之前向其添加1是行不通的,因为它会将5.0“四舍五入”为6.0 那么我应该如何在SQLite中实现在SQLite中获取数字的ceil值,sql,sqlite,ceil,Sql,Sqlite,Ceil,因此,我看到了一个很好的答案,但我希望无论如何都向上取整,而不是无论如何向下取整。例如,在强制转换int之前向其添加1是行不通的,因为它会将5.0“四舍五入”为6.0 那么我应该如何在SQLite中实现ceil select (case when x = cast(x as int) then cast(x as int) else 1 + cast(x as int) end) 使用php,您可以轻松: $db->createFunction(
ceil
select (case when x = cast(x as int) then cast(x as int)
else 1 + cast(x as int)
end)
使用php,您可以轻松:
$db->createFunction('ceil', 'ceil', 1);
$db->createFunction('floor', 'floor', 1);
select ceil(\`column`) from table;
这将为您提供更优雅的相同答案:
SELECT CAST(x+1-1e-n AS INT);
(假设精度不超过小数点)一些有用的答案,我发现这个解决方案也非常简单
select round(column+0.5) from table;
这意味着如果你的原始数字小于0.5,你总是向上取整;如果你的原始数字大于0.5,你总是向下取整。我知道这是很久以前的事了,但戈登,我认为多明戈的答案可能是这里最简洁的。这一个(虽然比多明戈的答案更详细)实际上是正确的。这是正确的方法,因为它涵盖了所有角落的情况。是一个更具可读性的版本。由于它将作为楼层功能使用,因此不会对其进行汇总。如果x的小数部分小于0.5,那么x+0.5将不会超过下一个整数。但是,这将起作用:
cast(四舍五入(x+0.5)为int)
最好的方法是选择cast(x+0.9为int);不,这是不正确的。用x=1试一下。。。它会给你2@Kyle今天什么都不用谢。对于精度小于n的所有情况,这一点都应适用:SELECT CAST(x+1-1e-n为INT)
@Luís Chaves如果你在他的解决方案上尝试x=1.01,你会得到1,而解决方案应该是2。同意,这不适用于纯SQLite虽然语言是php,但我觉得@user2812583实际上提出了一个有效的解决方案。您总是可以像这样在SQLite中创建自定义函数,但谢天谢地,在这种上下文中有更好的方法。我建议了一些替代方案,但仍然得到了+1的奖励。它不会一直奏效。例如,CEIL(1)=1
whereROUND(1+0.5,0)=2
查看postIf x是0,这将得到1