PostgreSQL 使用哪种数据类型来存储浮点数字更好?为什么?

Tar*_*ras 3 postgresql floating-point

我有一个 Laravel 应用程序需要存储最小和最大权重。目前,我们使用整数值来存储数据,但我需要修改它以使用浮点存储数据值。为了获得良好的准确性,我必须使用什么数据类型?

Vér*_*ace 5

我认为该REAL类型应该可以解决问题 - 如果您使用公斤,则重量可以达到微克 - 除非您使用一些奇特的实验室操作,这应该足够了 - 但重量约为 4.567 公斤(对于克)或 1234.45 公斤(十克)就可以了。

\n

从此处的手册(表 8.2):

\n
\n

实数 4 字节可变精度,不精确的 6 位小数精度

\n
\n

或者,如果您需要更高的精度:

\n
\n

双精度 8 字节可变精度,不精确的 15 位小数精度

\n
\n

并且:

\n
\n

数据类型实数和双精度是不精确的\n变精度数值类型。在所有当前支持的平台上,这些类型是二进制浮点运算(分别为单精度和双精度)的 IEEE 标准 754 的实现,只要底层处理器、操作系统和编译器支持即可。

\n
\n

对于任何涉及重量的计算来说,这应该足够了,这里或那里的几微克并不重要。

\n

可以使用其中一种数字类型(NUMERICDECIMAL- 本质上是同义词)

\n
\n

数值变量用户指定的精度,精确到小数点前 131072 位;小数点后最多 16383 位

\n
\n

但是,存在与这些相关的(可能不必要的)开销:

\n
\n

然而,与整数类型或下一节中描述的浮点类型相比,数值的计算非常慢。

\n
\n

NUMERIC(或)的优点DECIMAL是:

\n
\n

numeric 类型可以存储具有大量位数的数字。\n特别建议用于存储货币金额和其他\n需要精确性的数量。使用数字值进行计算会尽可能产生精确的结果,例如加法、减法、乘法。

\n
\n

显然,您的选择将取决于您(和/或您的利益相关者)的要求 - 对于权重,我建议REAL

\n

最后一个想法是将权重存储为INTEGERS- 但我仍然推荐其中一种浮点类型。

\n\n