2011-04-16 70 views

回答

50

精度是有效数字的个数。 Oracle保证数字的可移植性,精度范围为1到38.

比例是指向小数点 点右边(正数)或左边(负数)的位数。比例范围从-84到127.

在你的情况下,具有精度6的ID意味着它不会接受一个有7位或更多有效位数的数字。

参考:

http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1832

该页面也有一些例子,这将让你明白的精度和规模。

+1

那意味着最后的bumber将是1000000? – user700792 2011-04-16 21:17:53

+6

+1:我认为理解这一点的关键是了解内部数字格式 - 尾数和指数。精度对尾数的可能长度设置限制,并且标度对可能的指数最小值进行限制。 – 2013-06-11 12:03:45

+0

@DavidAldridge我回应你。我认为你应该考虑发布它作为关于尾数和指数的答案。数字实际上是以可变长度格式存储的。 – 2015-05-28 05:10:14

130

精密4,刻度2:99.99

精密10,刻度0:9999999999

精密8,规模3:99999.999

精密5,规模-3:99999000

+5

你能解释负面尺度的行为吗? – Geek 2014-06-19 13:08:17

+1

看起来像rounds /忽略许多左边为十进制的整数值 – JDPeckham 2014-06-20 03:54:39

+2

请记住,precision始终包含scale部分。例如:精度4,比例2 - 将失败> 99.9999 ..;尝试:从dual中选择cast(99.99999作为NUMBER(4,2)); //好;选择cast(100.9为NUMBER(4,2)); //失败; – 2015-03-06 17:47:35

-5

如果值为9999.988和精度4,标度2则表示9999(表示精度).99(标度为2,因此.988被舍入为0.99)

如果值为9 999.9887,精度为4,刻度为2则表示9999.99

+6

不,精度是要存储的有效位数。在这两种情况下,存储的精度都是6,比例是2. – 2013-06-11 12:01:37

39

精度是总位数。 比例尺是小数点后的位数。

实施例:
NUMBER(7,5):12.12345
NUMBER(5,0):12345

+10

精度是总数位数,而不是小数点左边的数字。 – 2013-06-11 11:51:55

+0

和比例尺是小数点右边(正数)或左边(负数)的位数,不只是小数点后面的位数。 – 2015-05-28 05:11:21

20

也许更加清晰:

注意精度的总位数,规模包括

NUMBER(精度,小数)

精密5,比例3:54.321

精密5,比例1:5432.1

精密5,刻度0:54321

精密5,比例-1:54320

精密5,尺度-3:54000

+0

这是一个非常好的解释。如果可以将精度总数位数置于顶部,那将更容易 – Yogamurthy 2016-07-16 01:39:00

+1

更改完成。谢谢。 – 2016-08-08 14:31:39

相关问题