1

我正在开发一个带有 oracle OCI 库的 C++ 库。我正在从 Oracle Database 11g 数据库加载。在这里,我需要加载带有小数位的大值。在这种情况下,我需要使用 long double 而不是 double。我不确定 OCI 是否支持 long double。
根据文档 SQLT_FLT 仅适用于 float 和 double 。有人可以让我知道 OCI 是否支持 long double 以及如果支持如何检索它们

4

1 回答 1

1

是和不是。

根据floats 上的服务器文档,“本机”C 类型最多支持双精度 ( BINARY_DOUBLE)。但是,NUMBER类型可以存储:

  • 1 x 10-130 到 9.99...9 x 10125 范围内的正数,最多 38 个有效数字
  • 从 -1 x 10-130 到 9.99...99 x 10125 的负数,最多 38 个有效数字

这比long doublex86/amd64 上的精度更高。

因此,您需要使用该类型而不是BINARY_*. 可悲的是,开发人员文档说:

您不需要NUMBER用作外部数据类型。如果您确实使用它,Oracle 会以其内部 21 字节二进制格式返回数值,并在输入时期望这种格式。以下讨论仅出于完整性考虑。

另一方面,也有关于:

AFAICS OCINumberFromReal()支持long double;如果你想要更高的精度,那么你可以使用OCINumberFromText()和十进制字符串。

于 2012-08-28T10:01:25.593 回答