[hackers-jp: 11] [HACKERS] round() function wrong? より

井久保 寛明 ikuboh @ nttdata.co.jp
2003年 11月 4日 (火) 21:10:59 JST


井久保です。

ちょっと古いところを読んでみたら、どうでもいい話でした。
# それなら書くなって言われそうですね...。

PostgreSQL の2.2.x では、round(2.5) は 2 になって、round(2.5000001) が
3 になるという話題です。

・7.3 以降では、どちらも 3 を返します。
・7.2 から 7.3 にあがる際に、SQLに埋め込まれている小数の型が、
  float から numeric に変わった。
・round(float) はプラットフォーム依存する。
・rounds xxx.5 は、ゼロからとおい方の整数になる(0.5 -> 1, -0.5 -> -1)

どのバージョンでも次のようになって、round(2.5) を 7.2 では float と
して扱うので前者、7.3 以降は numeric として扱うので後者になる。

select round(2.5::float);
 round
-------
     2
(1 row)

select round(2.5::numeric);
 round
-------
     3
(1 row)



---
井久保 寛明 (Hiroaki Ikubo)
NTTデータ先端技術 (株) ソリューション部
E-mail: ikubo @ intellilink.co.jp (E-mail: ikuboh @ nttdata.co.jp)





hackers-jp メーリングリストの案内