PostgreSQL 中的除法问题:为什么除法 (/) 返回不正确的结果
当尝试在 PostgreSQL 中使用整数列计算除法时,用户可能会遇到以下问题:遇到意想不到的结果。考虑以下场景:
问题:
名为“software”的表包含列“dev_cost”和“sell_cost”。您想要确定需要销售多少软件才能收回 dev_cost。鉴于“dev_cost”为 16000,“sell_cost”为 7500,您期望结果为 3。但是,查询
select dev_cost / sell_cost from software;
返回 2。
原因:
PostgresSQL 执行整数除法,这将结果截断为零。由于“dev_cost”和“sell_cost”都定义为整数,因此结果被截断为 2。
解决方案:
要获得正确的结果,至少需要一个操作数必须转换为浮点类型,例如 float 或decimal。这可以使用cast()函数或双冒号::运算符来实现:
select cast(dev_cost as decimal) / sell_cost from software;
或
select dev_cost::decimal / sell_cost from software;
或者,您可以使用将结果四舍五入到最接近的整数天花板()函数:
select ceil(dev_cost::decimal / sell_cost) from software;
演示:
[SQLFiddle 演示](https://www.sqlfiddle.com/#!17/23da8/1)
以上是为什么 PostgreSQL 整数除法返回错误结果?的详细内容。更多信息请关注PHP中文网其他相关文章!