使用PostgreSQL的数字精度舍入工件

使用PostgreSQL的数字精度舍入工件,postgresql,odbc,arbitrary-precision,Postgresql,Odbc,Arbitrary Precision,我们有一个应用程序正在尝试将大容量插入postgresql中的表中(我想是9.1,我没有权限帮助同事远程排除故障)。跟踪显示原始值正确生成并正确传递给ODBC 问题是,列定义为数字,但未定义比例或精度。似乎存在“随机”舍入工件。有时向上取整,有时向下取整,与小数位数无关。这在查询大容量插入的值时可以看到 我知道它会导致字符串问题,但不确定它是否与数字数据类型有关。数据库是windows 1252编码的,并且使用Unicode postgresql驱动程序。最后,在32位windows虚拟机上使用

我们有一个应用程序正在尝试将大容量插入postgresql中的表中(我想是9.1,我没有权限帮助同事远程排除故障)。跟踪显示原始值正确生成并正确传递给ODBC

问题是,列定义为数字,但未定义比例或精度。似乎存在“随机”舍入工件。有时向上取整,有时向下取整,与小数位数无关。这在查询大容量插入的值时可以看到

我知道它会导致字符串问题,但不确定它是否与数字数据类型有关。数据库是windows 1252编码的,并且使用Unicode postgresql驱动程序。最后,在32位windows虚拟机上使用一些类似于默认配置文件参数的仅供参考

问题是造成这种情况的原因是什么

提前感谢。

数据类型,而不是像
float8
双精度
)或
float4
real
)那样的浮点类型。也就是说,它存储传递给它的十进制数字,而不进行任何舍入。数字的复制方式相同。只有确切的格式可能取决于您的区域设置或中间件和客户端的设置

没有设置精度和刻度的事实使得
numeric
列几乎没有任何限制

小数点前最多131072位;小数点后最多16383位

要点:您可以排除Postgres数据类型
numeric
作为舍入效应的来源。其余的我不知道,尤其是因为您没有提供准确的版本号、演示值或可复制的测试用例。
我的猜测是,ODBC可能会将数字视为浮点类型。也许是过时的版本