【问题标题】:oracle data type = number, how does exponent relate to precision and scale?oracle数据类型=数字,指数与精度和规模有什么关系?
【发布时间】:2011-11-04 05:15:24
【问题描述】:

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

ask tom

我在解释它时遇到了麻烦。我应该提到我没有 Oracle 背景,但从 Matlab 经验中接近这一点。我了解数字数据类型具有精度和规模。我不明白这里如何处理指数。指数是否与精度和规模分开考虑?或者,指数是否受到精度和规模的限制?

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

问:我将表的列的数据类型声明为 NUMBER 并假定它为 具体为 Number(38)。但我发现奇怪的是 接受超过 38 位的数字。即。 1.111E+125。如果数据类型的精度 是 38,比例可以从 -84 到 127 这个值如何插入到列中。

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

这似乎表明指数与精度和比例分开处理。但是有人问了几条消息:

问:当我创建如下表时: 创建表测试(无编号(7)); 插入测试值(1.00e+25); 它给出以下错误消息: ORA-01438: 大于指定精度的值允许此列。 你能请。解释这一点。

A:你说的是 7 位数,你给的是 25

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

【问题讨论】:

    标签: database oracle


    【解决方案1】:

    number(7) 是一个(最多)七位数的整数(在“正常”十进制表示中)。请注意,不允许使用分数。不接受大于 9,999,999 的数字。这与他们有多少有效数字无关。这是您设置的“业务约束”。

    number(7,2) 是一个七位数字,包括小数点后两位

    number 是一个精度为 38 位的浮点数(即 38 位有效数字,无论它们相对于小数点的位置如何)。指数可以是 -84 到 125 之间的任何值。这里没有“业务限制”。您可以存储尽可能多的 Oracle 存储(即 38 位数字和 -84 到 125 之间的指数)。

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

    【讨论】:

    • 谢谢 Thilo,让我看看... NUMBER 和 NUMBER(38) 确实是两种完全不同的动物。虽然它们都有 38 位小数的精度,但 NUMBER 包含指数,因此它可以存储更大和更小的值,而 NUMBER(38) 仅限于包含 38 位小数的数字(无论小数点放在哪里)。对吗?
    • NUMBER(38) 将是 +1E+38 和 -1E+38 之间的整数。小数点前 38 位。
    • 好的,我想我得到的是,一旦你在 NUMBER 数据类型中输入了一个精度,你实际上是在限制指数,这样 NUMBER(d) (其中 d 是一个整数)可以只存储 +1E+38 到 -1E+38。未指定精度或小数位数的 NUMBER 可以存储更大或更小的值。
    • 是的。 NUMBER 可以存储比 NUMBER(d) 或 NUMBER(d,p) 大得多的值,但它是浮点值,而另一个是定点值。因此,即使在 NUMBER 的巨大范围内,您也只有有限的(38 位)精度。 “较长”的数字将被四舍五入。
    猜你喜欢
    • 2018-05-07
    • 2012-05-26
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    • 2021-04-09
    • 2011-08-07
    • 1970-01-01
    相关资源
    最近更新 更多