2016-02-19 69 views
0

我有這樣的例子:甲骨文雙變換

CREATE TABLE test 
(
    VALUE NUMBER (5, 2) 
); 

INSERT INTO test 
    VALUES (6.3); 

SELECT * FROM test; 

在臺試驗,我的6.3的值。 我有一個在.NET中的應用程序誰查詢此表,並返回單個值6.3。 假設值被存儲在s變量是這樣的:

Dim s As Single = 6.3 
Dim d As Double = CDbl(s) 

.NET轉換單成一個雙,和變量d具有此值:6.3000001907348633。據我所知,是6.3值的不同表現,但是當我在操作使用此d值是這樣的:

(795407.2 * d)/100 = 50110,6551171188 
在PL \ SQL

當我查詢的表,我想6.3000001907348633值代替6.3。 我怎樣才能轉換這個,或者有一個數據類型呢?我已經嘗試了BINARY_FLOATDOUBLE PRECISION類型,但它們不會將其轉換。

編輯:使用6.3值我得到:(795407.2 * d)/100 = 50110,6536。如果我四捨五入取得兩位小數(並假設這是貨幣價值,我分別得到50110,66€50110,65€)。

回答

1

嘗試在您的SQL中使用BINARY_FLOAT數據類型。

它代表了甲骨文32位浮點數:

SQL> select cast(6.3 as BINARY_FLOAT) num, 
    2   to_char(cast(6.3 as BINARY_FLOAT),'0.00000000') num_to_char 
    3 from dual; 

     NUM NUM_TO_CHAR 
---------- ----------- 
    6,3E+000 6.30000019 

編輯:

對不起,我太快速,沒有讀所有的試驗

爲了兼容性的考慮,試試你的號碼/文字於BINARY_FLOAT,然後轉換爲BINARY_DOUBLE

SQL> select TO_CHAR(cast(cast(6.3 as BINARY_FLOAT) as BINARY_DOUBLE),'0.000000000000000000') MyNum from dual; 

MYNUM 
--------------------- 
6.300000190734863300