C libpq:从数字中获取浮点值
C libpq: get float value from numeric
我有一个 table,其浮点值使用数字类型表示。如何使用 libpq 库从此字段中获取浮点值?
在 postgres 中有一种专门用于浮点类型的格式,但我必须使用带有数字字段的现有数据库。我没有在 Postgres 文档中找到有关它的信息,因此非常感谢每一个信息。
严格来说,您无法 获得 numeric
的准确浮点表示。无论如何都不是任意的numeric
。
numeric
是任意精度的十进制浮点数,在内部表示为二进制编码的十进制字符串。它通常作为十进制数字的文本字符串发送到客户端或从客户端发送。
float/double 是 固定精度 二进制 浮点数。它们cannot represent all decimal numbers without rounding errors,它们不能表示无限精度的数字,因为它们有固定的精度。
您的 numeric
是 numeric(18,15)
,即精度 18,小数位数 15。double precision
有 15-17 位有效数字,具体取决于精确值。所以你可能会因为四舍五入而丢失数据。
如果您不介意,您可以在 PQgetvalue
.[=28= 的文本输出上使用从文本解析浮点值的常用方法,例如 sscanf
]
如果您需要保留准确的十进制浮点数:避免舍入损失并在往返过程中保留精确值,您将需要使用十进制浮点库。对于任何 numeric
,您都需要任意精度的小数支持。对于 numeric(18,15)
,您几乎可以 将其放入 IEEE-754:2008 64 位十进制,但您确实需要 128 位十进制才能安全。
库包括:
- Intel's Decimal Floating Point library
- IBM 的十进制浮点库
- GNU MFPR - 任意精度
- decNumber
- libmpdec - 任意精度
较新的 gcc 也包括对 IEEE-754:2008 浮点数的支持。
Python 具有 decimal.Decimal
类型 (import decimal
) 的任意精度小数。 psycopg2
应该可以用这个。所以您可以考虑将此作为替代方案。
我有一个 table,其浮点值使用数字类型表示。如何使用 libpq 库从此字段中获取浮点值?
在 postgres 中有一种专门用于浮点类型的格式,但我必须使用带有数字字段的现有数据库。我没有在 Postgres 文档中找到有关它的信息,因此非常感谢每一个信息。
严格来说,您无法 获得 numeric
的准确浮点表示。无论如何都不是任意的numeric
。
numeric
是任意精度的十进制浮点数,在内部表示为二进制编码的十进制字符串。它通常作为十进制数字的文本字符串发送到客户端或从客户端发送。
float/double 是 固定精度 二进制 浮点数。它们cannot represent all decimal numbers without rounding errors,它们不能表示无限精度的数字,因为它们有固定的精度。
您的 numeric
是 numeric(18,15)
,即精度 18,小数位数 15。double precision
有 15-17 位有效数字,具体取决于精确值。所以你可能会因为四舍五入而丢失数据。
如果您不介意,您可以在 PQgetvalue
.[=28= 的文本输出上使用从文本解析浮点值的常用方法,例如 sscanf
]
如果您需要保留准确的十进制浮点数:避免舍入损失并在往返过程中保留精确值,您将需要使用十进制浮点库。对于任何 numeric
,您都需要任意精度的小数支持。对于 numeric(18,15)
,您几乎可以 将其放入 IEEE-754:2008 64 位十进制,但您确实需要 128 位十进制才能安全。
库包括:
- Intel's Decimal Floating Point library
- IBM 的十进制浮点库
- GNU MFPR - 任意精度
- decNumber
- libmpdec - 任意精度
较新的 gcc 也包括对 IEEE-754:2008 浮点数的支持。
Python 具有 decimal.Decimal
类型 (import decimal
) 的任意精度小数。 psycopg2
应该可以用这个。所以您可以考虑将此作为替代方案。