Oracle数据类型=数字,指数与精度和比例有什么关系?



我一直在尝试理解Oracle数据库的使用数据类型=数字。我看到了下面的链接:

问汤姆

,我在解释它时有困难。我应该提一下,我没有Oracle的背景,但是从Matlab的经验来看。我理解数字数据类型有精度和比例。我不明白的是这里的指数是怎么处理的。指数与精度和比例是分开考虑的吗?或者,指数是否受到精度和比例的限制?

这是我的困惑——上面的链接以:

开头

Q:我将一个表的列的数据类型声明为NUMBER &假定它是具体来说是第38号。但我发现奇怪的是,它确实是接受超过38位的数字。1.111 e + 125。如果数据类型的精度是38,刻度范围从-84到127,这个值如何插入到列中。

我们说过……1.111e+125只有4位精度(需要表示的位数)数字——在本例中是1111)。

这似乎表明指数与精度和比例是分开处理的。但几条信息之后,又有人问:

Q:当我创建一个表:创建表test(no number(7));插入测试值(1.00e+25);它给出以下错误信息:ORA-01438:值大于指定的精度允许此列。你能解释一下吗?

A:你说7位,你给了25位

似乎表明指数受到精度的限制。希望有人能帮助我理解为什么两个答案都是正确的。

number(7)是一个(最多)7位的整数(以"正常"十进制表示)。注意分数是不允许的。大于99999999的数字将不被接受。这与它们有多少位有效数字无关。这是您设置的"业务约束"。

number(7,2)为7位数字,包括小数点后2位

number是一个38位精度的浮点数(即38位有效数字,无论它们相对于小数点的位置如何)。指数可以是-84到125之间的任意值。这里不存在"业务约束"。Oracle可以存储多少就存储多少(即38位数字和-84到125之间的指数)

请注意,所有这些数字都存储为十进制数据(以避免转换为二进制时的舍入错误),因此"数字"实际上是指十进制数字(而不是二进制位)。

最新更新