2011-08-26 46 views
1

我一直在試圖理解Oracle數據庫對數據類型=數字的使用。我跑過以下鏈接:oracle數據類型=數字,指數如何與精度和比例相關?

ask tom

和我無法解釋它。我應該提到我沒有Oracle背景,但是從Matlab的經驗來看這個。我知道號碼數據類型具有精確性和規模。我不明白的是如何在這裏處理指數。指數是否與精度和尺度分開考慮?或者,指數是否受精度和比例限制?

這裏是我的困惑 - 上面的鏈接開頭:

問:我宣佈一個表的列數&它假定對 的數據類型是數字(38)是具體的。但我發現奇怪的是,它是 接受數字beyong 38 digits.ie。 1.111E + 125。如果數據類型的精度爲 爲38,並且縮放的範圍可以從-84到127這個值如何插入到列中。

答:我們說... 1.111e + 125只有4位數的精度(需要代表 數字的位數 - 在本例中爲1111)。

這似乎表明指數的處理與精度和尺度是分開的。但是有幾條消息要求別人提出:

問:當我創建一個表時: create table test(no number(7));將 插入測試值(1.00e + 25); 它給出了以下錯誤消息: ORA-01438:值大於指定的精度允許此列。 可以。解釋這一點。

答:你說的7位數字,你給它25

這似乎預示着指數由精度的限制。希望有人能幫助我理解這兩個答案如何是正確的。

回答

3

number(7)是(最多)七位數(以「正常」十進制表示形式)的整數。請注意,分數是不允許的。大於9,999,999的數字將不被接受。這與他們有多少有效位數無關。這是您制定的「業務約束」。

number(7,2)將與七位數一數,其中包括兩個小數點後

number與精度38位浮點數(即38顯著數字,無論他們在哪裏相對於小數點)。指數可以是-84到125之間的任何值。這裏沒有「商業限制」。您可以存儲與Oracle可以存儲的數量相同的數量(38位數字,指數介於-84和125之間)。

請注意,所有這些數字都存儲爲十進制數據(以避免轉換爲二進制時發生舍入誤差),所以「數字」實際上是指十進制數字(不是二進制位)。

+0

謝謝Thilo,讓我看看...... NUMBER和NUMBER(38)實際上是兩種完全不同的動物。儘管它們都具有38位精度的十進制數字,但NUMBER包含的指數可以存儲更大和更小的值,而NUMBER(38)僅限於包含38位十進制數字的數字(不管放置小數點的位置)。是對的嗎? – ggkmath

+0

NUMBER(38)將是+ 1E + 38到-1E + 38之間的整數。正好在小數點前面的38位數字。 – Thilo

+0

好吧,我想我得到的是一旦你輸入NUMBER數據類型的精度,你基本上限制指數,使NUMBER(d)(其中d是一個整數)只能存儲+ 1E + 38到-1E + 38。沒有指定精度或比例的NUMBER可以存儲更大或更小的值。 – ggkmath

相關問題