为什么SELECT FLOAT(0.1)在DB2中返回0.1?

时间:2011-06-17 09:59:29

标签: sql floating-point db2 approximation

为什么在DB2上执行以下SQL语句会返回 * 0.1

select FLOAT(0.1) from sysibm.sysdummy1  

我期待像REAL(0.1)这样的近似结果;
四舍五入为什么以及在哪里发生?

*使用Visual Explain

2 个答案:

答案 0 :(得分:2)

这只是猜测,但许多系统在格式化输出的浮点值时,会打印出比结果更接近任何其他浮点数的最短数字。由于FLOAT是双精度而REAL是单精度,它们将“0.1”舍入到不同的二进制近似值,并且很可能对于其中一个,0.1更接近舍入值而不是格式的任何其他值,而另一方则不然。

答案 1 :(得分:1)

0.1位十进制值的32位(单精度)和64位(双精度)表示之间存在差异。您可以使用在线IEEE 754 calculator查看。

32 bit: 0.09999999403953552 (3DCCCCCC)
64 bit: 0.1 (3FB999999999999A)

我检查了IBM DB2 documentation,实际上FLOAT函数是DOUBLE的同义词,所以它返回64位表示, exact 显示为近似值0.1。

  

REAL函数返回一个   单精度浮点数   代表一个数字。

     

FLOAT函数返回一个   a的浮点表示   数。 FLOAT是DOUBLE的同义词。