MW211 EXIT

devlog
PostgreSQL/四捨五入の罠
2012年06月24日
「7÷4=1.75」なわけだが、(小数点以下を)四捨五入した場合「2」になるはずだ。
┌──────────────────────────────────────┐
│SELECT ROUND(7 / 4)  →  1                                                  │
└──────────────────────────────────────┘
でも、そうならない。。。

どうやら、浮動小数点とかが絡むと正確性がなくなるらしい(ありがちな話)。

numeric型を使えばよいみたい。
いろいろ試してみた。
┌──────────────────────────────────────┐
│SELECT ROUND(7                   / 4)  →  1(double precision型)  不正確    │
│SELECT ROUND(7::bigint           / 4)  →  1(double precision型)  不正確    │
│SELECT ROUND(7::integer          / 4)  →  1(double precision型)  不正確    │
│SELECT ROUND(7::double precision / 4)  →  2(double precision型)  不正確?  │
│SELECT ROUND(7::real             / 4)  →  2(double precision型)  不正確?  │
├──────────────────────────────────────┤
│SELECT ROUND(7::numeric          / 4)  →  2(numeric型)             正確    │
│SELECT ROUND(7::decimal          / 4)  →  2(numeric型)             正確    │
└──────────────────────────────────────┘
分類:PostgreSQL