1

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

select FLOAT(0.1) from sysibm.sysdummy1  

我期待一个近似的结果,例如 for REAL(0.1);
为什么以及在哪里进行舍入?

* 使用视觉解释

4

2 回答 2

2

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

于 2011-06-17T15:48:46.427 回答
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 的同义词。

于 2011-06-17T15:45:31.667 回答