精度和规模有啥区别?

Posted

技术标签:

【中文标题】精度和规模有啥区别?【英文标题】:What is the difference between precision and scale?精度和规模有什么区别? 【发布时间】:2011-08-07 01:23:10 【问题描述】:

Oracle 中的精度和规模有什么区别?在教程中,他们通常将 scale 留空,并在创建主键时将精度设置为 6。

精度和比例代表什么?

【问题讨论】:

【参考方案1】:

精度 4,比例 2:99.99

精度 10,刻度 0:9999999999

精度 8,比例 3:99999.999

精度 5,比例 -3:99999000

【讨论】:

你能解释一下负尺度的行为吗? 看起来像四舍五入/忽略了小数点左侧的许多整数值 请记住,精度始终包括比例部分。例如:精度 4,比例 2 - 将失败任何数字 > 99.9999..;尝试:从双重中选择演员(99.99999 as NUMBER(4,2)); //好的;从对偶中选择演员表(100.9 as NUMBER(4,2)); //失败; @JamaDjafarov 99.99999 失败,如下所示:` 21:53:54 CB900@XYZ > 从双重中选择演员表(99.99999 as NUMBER(4,2)); select cast (99.99999 as NUMBER(4,2)) from dual * 第 1 行出现错误:ORA-01438:值大于此列允许的指定精度 21:52:32 CB900@ASCEND1 > 从 v$instance 中选择版本;版本 - - - - - - - - - - - - - - - - - - - - - - - - - -- 12.1.0.2.0 ` @Phalgun select cast(99.9999 as NUMBER(4,2)) from DUAL;是一个不好的例子,因为截断会将数字从 99 向上舍入到 100,这对于 NUMBER(4,2) 来说太大了。尝试从 DUAL 中选择 cast(88.8888 as NUMBER(4,2));而是看到响应是 88.89。【参考方案2】:

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

Scale 是小数点右侧(正)或左侧(负)的位数 观点。范围可以从 -84 到 127。

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

参考:

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

该页面还包含一些示例,可让您了解精度和规模。

【讨论】:

这意味着最后一个bumber将是1000000? +1:我认为理解这一点的关键是理解内部数字格式——尾数和指数。精度限制了尾数的可能长度,而比例限制了可能的最小指数。 @DavidAldridge 我回应你。我认为您应该考虑将其发布为关于尾数和指数的答案。数字实际上是以可变长度格式存储的。 CHAR 数据类型的精度如何?【参考方案3】:

Precision是总位数,可以在1到38之间。Scale是小数点后的位数,也可以设置舍入为负数。

示例: 号码(7,5):12.12345 号码(5,0):12345

更多详情请访问 ORACLE 网站:https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT1832

【讨论】:

而Scale是小数点右边(正)或左边(负)的位数,而不是小数点后的位数。 看看 koljaTM 的例子。精度是多少个有效数字,它可能有一个值(即,不仅仅是“0”作为占位符)。比例表示那些相对于小数点的下降方式。 Scale 可以为负数,表示您不关心的高于 0 的精度。 NUMBER(1,-4):只允许 10 个值:00000、10000、20000...90000 精度不仅仅是总位数。正如大卫奥尔德里奇在他对 manojlds 的评论中解释的那样,它是尾数 - 你关心多少有效数字。被认为是指数的比例是一种更准确但深奥的解释。任何负数刻度在小数点后都没有数字,并且在小数点左侧有那么多的 0 作为占位符。 NUMBER(1,-4) 将有 5 位数字,但只有第一个,在 10,000 位中会有一个您关心的值。【参考方案4】:

也许更清楚:

注意精度是总位数,包括小数位

NUMBER(精度、比例)

8 级精度,3 级:87654.321

精度 5,比例 3:54.321

精度 5,比例 1:5432.1

精度 5,刻度 0:54321

精度 5,比例 -1:54320

精度 5,比例 -3:54000

【讨论】:

【参考方案5】:

比例是小数点后的位数(或冒号,取决于您的语言环境)

精度是有效位数的总数

【讨论】:

【参考方案6】:

precision:它是小数点之前或之后的总位数。 例如:123.456 这里的精度是 6。

Scale:小数点后的总位数。 例如:123.456 这里是 Scaleis 3

【讨论】:

【参考方案7】:

如果值为 9999.988 且精度为 4,刻度为 2,则表示 9999(表示精度).99(刻度为 2,因此 .988 舍入为 .99)

如果值为 9999.9887,精度为 4,比例为 2,则表示 9999.99

【讨论】:

不,精度是要存储的有效位数。在这两种情况下,存储的精度都是 6,比例是 2。

以上是关于精度和规模有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

浮点类型说明浮float,double有啥区别啊

浮点类型说明浮float,double有啥区别啊

在C#中long与int64有啥区别吗

在51单片机上,pcf8951和xpt2046有啥区别?

测绘中的RTK和GPS有啥区别?

C语言中int和float有啥区别啊