2016-02-19 58 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