为什么在DB2上执行以下SQL语句返回*0.1
?为什么SELECT FLOAT(0.1)在DB2中返回0.1?
select FLOAT(0.1) from sysibm.sysdummy1
我在等待REAL(0.1)
的近似结果;
四舍五入为什么发生?
*使用Visual解释
为什么在DB2上执行以下SQL语句返回*0.1
?为什么SELECT FLOAT(0.1)在DB2中返回0.1?
select FLOAT(0.1) from sysibm.sysdummy1
我在等待REAL(0.1)
的近似结果;
四舍五入为什么发生?
*使用Visual解释
这只是一个猜测,但许多系统在格式化输出的浮点值时,会打印出比其他任何浮点数更接近结果的最短数字。由于FLOAT是双精度的,REAL是单精度的,它们会将“0.1”舍入到不同的二进制近似值,很可能对于其中的一个,0.1更接近四舍五入的值,而不是格式的任何其他值,而另一方面则不是。
有32位(单精度)和64位的0.1十进制值的(双精度)表示之间的差异。您可以使用在线IEEE 754 calculator来查看。
32 bit: 0.09999999403953552 (3DCCCCCC)
64 bit: 0.1 (3FB999999999999A)
我检查IBM DB2 documentation,实际上浮动功能是DOUBLE的同义词,所以它返回64位表示,这是
确切
显示有作为近似值0.1。
REAL函数返回一个 单精度浮点数 的表示形式。
FLOAT函数返回一个 数字的浮点表示形式的 数字。 FLOAT是DOUBLE的同义词。
64位浮点值不能准确地表示0.1 eiter – 2011-06-17 15:49:28