PostgreSQL 何时舍入双精度列类型



我的一位同事一直告诉我不要对PostgreSQL列使用双精度类型,因为我最终会遇到舍入问题。

我只知道一种情况,即值以近似值存储,并且保存了具有"太多"十进制数字的数字。

例如,如果我尝试存储 1/3 的结果,那么我将得到一个近似值。

另一方面,他声称上述情况不是唯一的情况。他说,有时,即使用户尝试存储具有明确定义的位数(例如 84.2 或 3.124(的数字,对于第二种情况,该值也可能另存为 84.19 或 3.1239

这对我来说听起来很奇怪。

谁能给我一个例子/证明上述情况确实会发生?

你的同事是对的:远离floatdouble。但不是因为舍入问题,而是因为这些是近似数据类型。你放入该列的内容不一定是你得到的内容。

如果您关心精度和准确的值,请使用numeric

有关近似数据类型陷阱的更详细说明,请参阅此处:

  • https://floating-point-gui.de/
  • https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

最新更新