回答
这个问题可能是为什么不是? 请尝试以下SQL。
select cast(0.0001 as number(2,5)) num,
to_char(cast(0.0001 as number(2,5))) cnum,
dump(cast(0.0001 as number(2,5))) dmp
from dual
你看到的是,你可以举办小型的数字是那种结构的 它可能不是很经常需要,但我敢肯定的地方是谁的人是存储非常精确,但非常小的数字。
嗯,据我所知,参考精度是数字的计数。
maximum precision of 126 binary digits, which is roughly equivalent to 38 decimal digits
在oracle中你有类型NUMBER(精度,小数)其中精度的数字和刻度总数的小数点数字的正确数量。比例可以省略,但它意味着零。精度可以不指定(使用即NUMBER(*,10)) - 这意味着总数位数是按需要的,但有10位数字正确
如果比例小于零,则数值将四舍五入为scale
数字离开小数点。
我认为,如果你保留更多的小数点右边的数字比整个数字中可以有更多的数字,这意味着类似于0.0000000,但我不是100%确定。
托拜厄斯:如果规模比精度较大(例如'NUMBER(1,2)'),那么我们得到'ORA-06502:PL/SQL:数字或值错误字符串'当试图**分配**一个值给它 - 而不是当**定义**它... – 2010-03-18 21:59:55
感谢大家的答案。它看起来像精度是有效数字的数量。
select cast(0.00as number(2,5)) from dual
结果:
.00012
凡
select cast(0.0as number(2,5)) from dual
和
select cast(0.000999 as number(2,5)) from dual
两个结果:
ORA-01438: value larger than specified precision allowed for this column
由于四舍五入的第二个。
根据Oracle文档:
量表可以大于精度,最常用当E表示法。当比例大于精度时,精度将指定小数点右侧的最大有效位数。例如,定义为NUMBER(4,5)的列对小数点后的第一个数字要求为零,并将小数点后的第五个数字后的所有值四舍五入。
指定定点编号列的比例和精度以便对输入进行额外的完整性检查是一种很好的做法。指定比例和精度不会将所有值强制为固定长度。如果一个值超过精度,则Oracle返回一个错误。如果一个值超过了规模,那么Oracle会对其进行调整。
其中规模大于精度可以概括这样的情况:
对小数点右边位数=规模
零权小数=秤的最小数量 - 精密
--this will work
select cast(0.123456 as number(5,5)) from dual;
返回0.12346
-- but this
select cast(0.123456 as number(2,5)) from dual;
--will return "ORA-1438 value too large".
--It will not return err with at least 5-2 = 3 zeroes:
select cast(0.00as number(2,5)) from dual;
返回0.00012
-- and of course this will work too
select cast(0.000as number(2,5)) from dual;
返回0.00001
根据Oracle文档:
规模可以大于精度,最常用当使用前符号(其中小数部分可以是如此之大) 。当比例大于精度时,精度将指定小数点右侧的最大有效位数。例如,定义为
NUMBER(4,5)
的列要求小数点后第一位的值为零,并将小数点后第五位后的所有值四舍五入。
我是这样看的:
- 当
Precision
比规模更大(如),没问题,这很简单。Precision
表示该数字共有8位数字,其中5个位于小数部分(。→),因此整数部分(←。)将有3位数字。这很容易。 当你看到
Precision
小于Scale
(例如NUMBER(2, 5)
),这意味着3两件事:- 的数量不会有任何的整数部分,只有小数部分。所以整数部分的0不计算在计算中,你说.12345不是0.12345。事实上,如果你在整数部分只指定了1位数,它总会返回一个错误。
Scale
表示数字小数部分的总位数。 5在这种情况下。因此它可以是.12345或.00098,但总共不超过5位数。- 小数部分分为2部分,有效数字和零。重要数字由
Precision
指定,最小零数等于(Scale
-Precision
)。例如:
这里的数量将必须在小数部分的最小的3个零。其次是2个有效数字(也可以为零)。所以3个零点+2个有效数字= 5这就是
Scale
号码。
总之,当你看到例如NUMBER(6,9)
,这告诉我们,小数部分将有共9个数字,通过强制性的3个零开始,其次是6位数字。
下面是一些例子:
SELECT CAST(.000AS NUMBER(6,9)) FROM dual; -- prints: 0.0000123; .000|
SELECT CAST(.000AS NUMBER(6,9)) FROM dual; -- prints: 0.0000123; .000|
SELECT CAST(.123456 AS NUMBER(3,4)) FROM dual; -- ERROR! must have a 1 zero (4-3=1)
SELECT CAST(.013579 AS NUMBER(3,4)) FROM dual; -- prints: 0.0136; max 4 digits, .013579 rounded to .0136
- 1. 如何指定Oracle数字的精度/比例JDBC元数据?
- 2. Oracle to_char函数具有任意精度和一定比例的数字格式
- 3. @column中的精度和缩放比例
- 4. Oracle“Number”数据类型精度
- 5. 用SKAction.scale更改精灵的比例
- 6. oracle数据类型=数字,指数如何与精度和比例相关?
- 7. (Oracle)的选择result'length比最大长度
- 8. CSS止动元件由具有比父母更大的高度
- 9. 如何解释数据库中数字的精度和比例?
- 10. 如何比较双精度5位数?
- 11. 如何通过BigDecimal验证精度和缩放比例?
- 12. CakePHP迁移 - 如何指定比例和精度
- 13. 如何在SQL中设置精度和缩放比例(访问)
- 14. JavaScript动画比例精灵
- 15. Cocos2d滚动比例精灵
- 16. 比例精灵错误
- 17. 确定精度和特定数目的比例在Python
- 18. 具有常见比例/维度的日期度量值
- 19. 具有比其大小更多成员的比特场联合的大小
- 20. 将梯度图例的比例更改为具有特定分数的百分比
- 21. 如何根据具有动态宽度的父容器设置比例宽度
- 22. 与双精度对比
- 23. 双精度比较失败
- 24. 百分比精度在bash
- 25. 如何设置leaflet.js的具体比例
- 26. 更精确的数字数据类型比双精度?
- 27. 与睡眠相比,计时器有更好的精确度()
- 28. HTML5视频具有固定高度,但比例宽度为100%
- 29. 如何为$ IMG的最大高度,但保持的比例
- 30. D3,比例如何设置比例?
@加里,谢谢你的例子。文档中说精度是总位数,标度是小数点后的数字。那么NUMBER(2,5)如何将“总位数”设为2,并在小数点后面存储5位数? – aiGuru 2010-03-18 22:22:15
我认为是这样的: NUMBER(2,5)例如0.00012 = 1.2E-4 或类似的东西 – Tobias 2010-03-19 07:19:12