回答
這個問題可能是爲什麼不是? 請嘗試以下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