【问题标题】:Oracle double conversionOracle 双转换
【发布时间】:2016-06-01 07:30:49
【问题描述】:

我有这个例子:

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 将 single 转换为 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€)。

【问题讨论】:

    标签: sql vb.net oracle types plsql


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2015-06-21
      • 1970-01-01
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-31
      • 2015-10-13
      相关资源
      最近更新 更多