Taras Asked: 2023-04-03 17:40:18 +0800 CST2023-04-03 17:40:18 +0800 CST 2023-04-03 17:40:18 +0800 CST 哪种数据类型更适合 PostgreSQL 存储带浮点数的数字,为什么? 772 我有一个需要存储最小和最大重量的 Laravel 应用程序。目前,我们正在使用整数值来存储数据,但我需要修改它以使用浮点数来存储数据值。我必须使用什么数据类型才能获得良好的准确性? postgresql 2 个回答 Voted Best Answer Vérace 2023-04-03T18:39:16+08:002023-04-03T18:39:16+08:00 我认为这种REAL类型应该可以解决问题——如果你使用公斤,你可以得到微克的重量——除非你使用一些花哨的实验室操作,那应该足够了——但像 4.56 公斤或 1234.45 公斤这样的重量会是美好的。 从此处的手册(表 8.2): 实数 4 字节可变精度,不精确的 6 位十进制数字精度 或者,如果您需要更高的精度: 双精度 8 字节可变精度,不精确的 15 位十进制数字精度 并且: 数据类型 real 和 double precision 是不精确的可变精度数字类型。在所有当前支持的平台上,这些类型是二进制浮点运算(分别为单精度和双精度)的 IEEE 标准 754 的实现,以达到底层处理器、操作系统和编译器支持它的程度。 这对于任何涉及重量的计算都应该足够了,这里或那里几微克并不重要。 您可以使用其中一种数字类型(NUMERIC或DECIMAL- 本质上是同义词) 数字变量用户指定精度,精确到小数点前131072位;小数点后最多 16383 位 但是,有一个(可能是不必要的)开销与这些相关联: 但是,与整数类型或下一节中描述的浮点类型相比,数值的计算速度非常慢。 NUMERIC(or )的好处DECIMAL是: numeric 类型可以存储具有大量数字的数字。特别推荐用于存储货币金额和其他需要精确性的数量。在可能的情况下,使用数值进行的计算会产生准确的结果,例如,加法、减法、乘法。 显然,您的选择将取决于您(和/或您的利益相关者)的要求——对于权重,我建议REAL。 如果计算能力(本质上是系统 RAM)是一个问题,最后一个想法是将重量存储为INTEGERS克(或毫克或微克),具体取决于您的要求 - 但我仍然会推荐其中一种浮点类型。 HTH,欢迎来到 dba.se! comment-answers 2023-04-03T21:44:14+08:002023-04-03T21:44:14+08:00 这取决于您对数学运算正确性的要求。浮点值是近似值:您存储的可能不是您检索的。有关详细信息,请参阅每个程序员应了解的浮点运算知识 如果正确性很重要,请使用numeric. 如果数百万或数亿行的性能更重要,则使用浮点类型。- user1822
我认为这种
REAL
类型应该可以解决问题——如果你使用公斤,你可以得到微克的重量——除非你使用一些花哨的实验室操作,那应该足够了——但像 4.56 公斤或 1234.45 公斤这样的重量会是美好的。从此处的手册(表 8.2):
或者,如果您需要更高的精度:
并且:
这对于任何涉及重量的计算都应该足够了,这里或那里几微克并不重要。
您可以使用其中一种数字类型(
NUMERIC
或DECIMAL
- 本质上是同义词)但是,有一个(可能是不必要的)开销与这些相关联:
NUMERIC
(or )的好处DECIMAL
是:显然,您的选择将取决于您(和/或您的利益相关者)的要求——对于权重,我建议
REAL
。如果计算能力(本质上是系统 RAM)是一个问题,最后一个想法是将重量存储为
INTEGERS
克(或毫克或微克),具体取决于您的要求 - 但我仍然会推荐其中一种浮点类型。HTH,欢迎来到 dba.se!
这取决于您对数学运算正确性的要求。浮点值是近似值:您存储的可能不是您检索的。有关详细信息,请参阅每个程序员应了解的浮点运算知识
如果正确性很重要,请使用
numeric
. 如果数百万或数亿行的性能更重要,则使用浮点类型。- user1822