我有这个例子:
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_FLOAT
和DOUBLE PRECISION
类型,但它们没有转换它。
编辑:使用6.3
值,我得到:(795407.2 * d) / 100 = 50110,6536
。如果我将值四舍五入得到两位小数(假设这是一个货币值,我分别得到50110,66€
和50110,65€
。
答案 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