Oracle双转换

时间:2016-02-19 16:32:09

标签: sql vb.net oracle types plsql

我有这个例子:

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将单个转换为double,变量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 个答案:

答案 0 :(得分:1)

尝试在SQL中使用BINARY_FLOAT数据类型。

它表示Oracle中的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