PostgreSQL 中的除法运算不准确
在 PostgreSQL 中执行除法 (/) 运算时,需要注意的是,结果可能不准确正如预期的那样,尤其是在处理整数数据类型时。在这种情况下,除法会将结果截断为零,这可能会导致错误的答案。
为了说明该问题,请考虑一个名为“software”的表,其中包含两个整数列:“dev_cost”和“sell_cost”。如果“dev_cost”为 16000,“sell_cost”为 7500,则使用以下查询将“dev_cost”除以“sell_cost”:
select dev_cost / sell_cost from software ;
将返回结果 2。但是,正确答案是 3,表示需要出售 3 套软件才能收回开发成本。
要解决这个问题,需要确保除法运算中至少有一个值被转换为浮点或十进制数据类型。这允许精确的浮点计算,保留结果的小数部分。实现此目的的一种方法是在查询中将“dev_cost”列转换为十进制类型:
select cast(dev_cost as decimal) / sell_cost from software ;
或者,您可以使用 PostgreSQL 类型转换运算符来简化转换操作:
select dev_cost::decimal / sell_cost from software ;
最后,要获得向上舍入到最接近的整数的整数结果,可以使用 ceil() 函数查询:
select ceil(dev_cost::decimal / sell_cost) from software ;
通过遵循这些准则,您可以克服 PostgreSQL 中整数除法带来的潜在不准确性,并确保对数值数据进行准确的数学运算。
以上是为什么 PostgreSQL 整数除法会产生意外的结果,如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!