Oracle 中 NUMBER 数据类型的真正限制是什么?

问题描述 投票:0回答:1

我需要帮助来理解 NUMBER 数据类型,因为来自 Oracle 文档的以下 2 条语句对我来说似乎是互斥的。

“NUMBER 数据类型存储零以及具有绝对值的正负固定数 从 1.0 x 10^-130 到但不包括 1.0 x 10^126。

精度p的范围可以从1到38。标度s的范围可以从-84到127。”

我的问题:

  1. 如何处理像 1.0 x 10^126 这样大的值,精度(给定数值中的所有位数)等于 38。据我了解,值 1.0 x 10^126 需要精度至少为 126,因为该值需要 126 位才能存储。
  2. 如何可能拥有像 38 这样的精度和比它更大的比例,例如。 127?

提前抱歉,如果这个问题对我以外的所有人来说都是显而易见的。

sql oracle numbers precision numeric
1个回答
0
投票

如何处理像 1.0 x 10^126 这样大的值,精度(给定数值中的所有位数)等于 38。据我了解,值 1.0 x 10^126 需要精度至少为 126,因为该值需要 126 位才能存储。

Oracle 为小数位数保留 1 个字节,然后为每个字节存储 2 位数字作为精度,因此如果小数位数为 127,精度为 38,则存储的值可能是:

99999999999999999999999999999999999999000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

(三十八个 9 位数字,后跟八十九个 0 位数字)

任何

0
数字都不会存储在数据库中,只会存储
9
数字。

因此无法存储127位数字,只能存储127位数字的前38位有效数字。

如何可能拥有像 38 这样的精度和比它更大的比例,例如。 127?

不要存储数字、字符串或二进制值。

如果您希望将其存储为数字数据类型,那么您不能这样做,因为数据类型的限制阻止了它。

© www.soinside.com 2019 - 2024. All rights reserved.