为什么在 DB2 上执行以下 SQL 语句会返回* 0.1
?
select FLOAT(0.1) from sysibm.sysdummy1
我期待一个近似的结果,例如 for REAL(0.1)
;
为什么以及在哪里进行舍入?
* 使用视觉解释
为什么在 DB2 上执行以下 SQL 语句会返回* 0.1
?
select FLOAT(0.1) from sysibm.sysdummy1
我期待一个近似的结果,例如 for REAL(0.1)
;
为什么以及在哪里进行舍入?
* 使用视觉解释
这只是一个猜测,但许多系统在格式化输出的浮点值时,将打印比任何其他浮点数更接近结果的最短数字。由于 FLOAT 是双精度而 REAL 是单精度,它们会将“0.1”舍入为不同的二进制近似值,并且很可能对于其中一个,0.1 比格式的任何其他值更接近舍入值,而对于另一个,它不是。
0.1 十进制值的 32 位(单精度)和 64 位(双精度)表示之间存在差异。您可以使用在线IEEE 754 计算器来查看。
32 bit: 0.09999999403953552 (3DCCCCCC)
64 bit: 0.1 (3FB999999999999A)
我检查了IBM DB2 文档,实际上 FLOAT 函数是 DOUBLE 的同义词,因此它返回 64 位表示,在那里精确显示为近似值0.1。
REAL 函数返回数字的单精度浮点表示。
FLOAT 函数返回一个数字的浮点表示。FLOAT 是 DOUBLE 的同义词。