Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sybase ASE与Oracle 11g的轮函数差异_Oracle_Oracle11g_Rounding_Sap Ase - Fatal编程技术网

Sybase ASE与Oracle 11g的轮函数差异

Sybase ASE与Oracle 11g的轮函数差异,oracle,oracle11g,rounding,sap-ase,Oracle,Oracle11g,Rounding,Sap Ase,以下查询在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 两个数据库中的未舍入值均为0.285。sybase中FixedRate的数

以下查询在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

两个数据库中的未舍入值均为0.285。sybase中FixedRate的数据类型是float,Oracle中是float(126)


为什么会有差异(Sybase中的0.28和Oracle中的0.29)以及如何使这两个数据库中的差异相同?

正如我所记得的,Sybase不对浮点使用Base-10编码,因此.285被存储为类似于.284999999999999的内容。这就是为什么它是向下舍入而不是Oracle的向上舍入。Oracle的TRUNC(FIXED_RATE,2)和SYBASE的TRUNCATE(FIXED_RATE,2)都将返回0.28,但如果您想要正确的四舍五入,则需要重新考虑存储数字的数据类型,因为FLOAT在这两个系统中都可能存在固有的不精确性。

两个数据库中未舍入的完整值是多少?每种类型的数据类型是什么?首先不应该使用
float
。在Oracle中使用精确的数字类型,如
number