我有一張桌子。它有一個數據類型爲NUMBER(38,20)的列。它是一個id列。 out應用程序生成該id。我正嘗試插入105.00010的id值的記錄。但它只能插入105.0001。我可以知道它爲什麼截斷一個值(0)的原因。它適當地插入從105.00001到105.00009的記錄。插入105.00010時會截斷。請幫幫我。oracle在使用精度保存id後截斷值?
列大小**NUMBER(38,20)**
謝謝!
我有一張桌子。它有一個數據類型爲NUMBER(38,20)的列。它是一個id列。 out應用程序生成該id。我正嘗試插入105.00010的id值的記錄。但它只能插入105.0001。我可以知道它爲什麼截斷一個值(0)的原因。它適當地插入從105.00001到105.00009的記錄。插入105.00010時會截斷。請幫幫我。oracle在使用精度保存id後截斷值?
列大小**NUMBER(38,20)**
謝謝!
參見下測試用例:
WITH data_values
AS (SELECT 105.0001 AS test_val FROM dual
UNION ALL
SELECT 105.00010 AS test_val FROM dual)
SELECT test_val,
TO_NUMBER(test_val, '999.99999') AS NUM,
TO_CHAR(test_val, '999.99999') AS STR
FROM data_values;
結果:
TEST_VAL NUM STR
105.0001 105.0001 105.00010
105.0001 105.0001 105.00010
最後非零數字後的值是無關緊要到Oracle。你的號碼是相同的。
小數點後面的最右邊的零不重要,所以值不會被截斷,它仍然是相同的值。
如果您需要它保持不變,您可能需要將該值視爲varchar2。
感謝您的回覆。我正在查看這個ID在sqldeveloper。這裏看起來好像被截斷了。但同樣我有使用pl/sql開發人員的查詢。我在這裏得到所有的精度。爲什麼sqldeveloper是這樣顯示的?請幫幫我。 – user1016403 2011-12-20 13:30:53
您需要設置默認字符掩碼以在您的SQLDeveloper首選項中顯示數字數據。 – Ollie 2011-12-20 13:35:22
請分享我設置它的步驟嗎?請回復.. – user1016403 2011-12-20 13:36:12
'105.00010' **正好**與'105.0001'相同。沒有被截斷。 – 2011-12-20 13:08:58
嗨,謝謝你的回覆。現在如果我用105.0001的ID保存記錄,那麼它是否會覆蓋以前的記錄? – user1016403 2011-12-20 13:11:24
當您更新列中的值時,當然以前的值將被覆蓋。你的問題到底是什麼? – 2011-12-20 13:14:11