[pgsql-jp: 37161] Re: 消費税計算で失敗しました。

Kawasaki Yusuke u-suke @ kawa.net
2006年 6月 5日 (月) 23:43:24 JST


川崎です。こんばんは。real は6桁で破綻するのですか。手強いですね。

http://www.postgresql.jp/document/pg814doc/html/datatype.html#DATATYPE-NUMERIC-DECIMAL
|| 8.1.2. 任意の精度を持つ数
|| numeric型は、最大1000桁の精度で数値を格納でき、正確な計算を行えます。
|| 通貨金額やその他正確性が求められる数量を保存する時は特に、この型を推奨します。
|| とは言っても、numericの値に対する算術演算の動作は整数や、次節で説明する
|| 浮動小数点データ型に比較し非常に遅くなります。

とのことですので、できることなら numeric 型が良さそうですが、
double precision でも、100兆〜銭の位まで使えるならほぼ実用的か。

あるいは、安易にパーセンテージの値を100倍してinteger の 5として記録しておくと
将来的な税率見直しで、もしも例えば7.5%とかになると困りますね。
米国とかだと、州によっては .5%単位の細かい税率があったりするかと思いますが、
向こうでPostgreSQL を使っている場合はどうやって実装されてるんでしょう?
日本だと、.5%の税率は使わない気もします(期待します)。
あるいは1000倍して、銭の下で1000分の1円の厘単位のintegerで計算するか。

On 6/5/06, AOKI KAZUYUKI <aoki-kazuyuki @ nifty.com> wrote:
> 消費税計算が合わないので、
> 原因をさがしておりました。
>
> DROP TABLE test;
> CREATE TABLE test (tax_rate real);
> INSERT INTO test (tax_rate)values(0.05);
> SELECT (1+tax_rate) FROM test;
>
> 上記の最後の答えは
>     1.05000000074506
> となってしまいます。
> お金を扱うときは double precision でないとダメですね。

-- 
Kawasaki Yusuke <u-suke @ kawa.net> http://www.kawa.net/



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