【问题标题】:Difference in Round function of Sybase ASE and Oracle 11gSybase ASE 和 Oracle 11g 的 Round 函数的区别
【发布时间】:2016-02-17 15:31:27
【问题描述】:

以下查询在 Sybase ASE

上运行
SELECT ROUND(FixedRate,2) AS FixedRate FROM TableName WHERE ID=10000905;

结果是

固定利率

0.28

以下查询在 Oracle 11g

上运行
SELECT Round(FIXED_RATE,2) AS FixedRate FROM TableName WHERE ID=10000905;

结果是

固定

0.29

两个 db 中未取整的值为 0.285。 sybase中FixedRate的数据类型是float,Oracle中是float(126)。

为什么会有差异(Sybase 中的 0.28 和 Oracle 中的 0.29),我怎样才能使两个数据库中的差异相同?

【问题讨论】:

  • 两个数据库中未取整的完整值是多少?每个的数据类型是什么?
  • 你不应该首先使用float。在 Oracle 中使用 exact 数字类型,例如 number

标签: oracle oracle11g rounding sap-ase


【解决方案1】:

我记得,SYBASE 不使用 FLOATS 的 Base-10 编码,因此 .285 被存储为 .284999999999999999 之类的东西。这就是为什么它是向下舍入而不是甲骨文的向上舍入。 Oracle 的 TRUNC(FIXED_RATE,2) 和 SYBASE 的 TRUNCATE(fixed_rate,2) 都将返回 0.28,但如果您想要正确的四舍五入,那么您需要重新考虑存储数字的数据类型,因为 FLOAT 具有固有的潜力两个系统都不准确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 2023-02-16
    • 1970-01-01
    相关资源
    最近更新 更多