如何强制Postgres以数字精度进行计算



我有一个使用dapper和Postgresql的.net核心应用程序。Windows,PostgreSQL 12.0,由Visual C++编译,版本1914,64位

当我在select语句中进行简单计算时,如果我不提供分数,我会得到不同的结果:

select round(25358-25358/105*100,0);

1258

select round(25358.0-25358.0/105*100,0);

1208

原因是什么?获得正确数字结果的最佳方法是什么?

Postgres和许多其他数据库(例如SQL Server(一样,进行整数除法:当两个操作数都是整数时,结果也是整数(小数部分刚刚删除(。

25358/105的两个操作数都是整数,因此结果为241

另一方面,25358.0/105有一个十进制操作数,因此结果为十进制:241.504...

其余的计算也会受到相应的影响。

select 25358/105 integer_divison, 25358.0/105 decimal_division
integer_divison|decimal_division--------------:|----------------:241 | 241.5047619047619048

最新更新