[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 メーリングリストの案内