考慮以下測驗代碼:
CREATE TABLE binary_test (bin_float BINARY_FLOAT, bin_double BINARY_DOUBLE, NUM NUMBER);
INSERT INTO binary_test VALUES (4356267548.32345E 100, 4356267548.32345E 2 300, 4356267548.32345E 100);
SELECT CASE WHEN bin_double>to_binary_double(num) THEN 'Greater'
WHEN bin_double=to_binary_double(num) THEN 'Equal'
WHEN bin_double<to_binary_double(num) THEN 'Lower'
ELSE 'Unknown' END comparison,
A.*
FROM binary_test A;
我試圖查看哪一個存盤更高的值。如果我嘗試為數字和 binary_float 列添加 E 300,它會回傳數字溢位錯誤。所以,我想我可以用 binary_float 存盤更大的值。但是,當我嘗試檢查它時,它顯示的值較低,并且通過案例比較它說它也較低。你能詳細說明一下這種情況嗎?
uj5u.com熱心網友回復:
您正在將值 4356267548.32345E 2 300 插入到二進制雙列中。計算結果為 4356267548.32345E 2,即 435626754832.345,加上 300 - 即 435626755132.345(或 4.35626755132345E 011,當轉換為二進制時變為 4.3562675513234497E 011)這明顯低于 4356267548.32345E 100(或 4.35626754832345E 109,轉換為二進制雙精度后變為 4.3562675483234496E 109)。
不直接相關,但您還應該知道您提供的是十進制數字文字,在插入期間將隱式轉換為二進制雙精度數。所以你不能使用 4356267548.32345E 300,因為它對于數字資料型別來說太大了。如果要指定二進制雙精度字面量,則需要在其上附加 a d,即 4356267548.32345E 300d;但這仍然太大了。
您可以使用該數字部分的最高值是 4356267548.32345E 298d,其計算結果為 4.3562675483234498E 307 - 略低于1.79769313486231E 308的資料型別限制;并注意精度的損失。
db<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/448746.html
