« varchar(1)のデフォルト値 | トップページ | cshの憂鬱 »

2006.10.24

Currency型を考えてみる

お金周りというのは間違えると非常にマズい部分の筆頭であり、四捨五入の有効桁数の間違いとか、恥ずかしながらときどきやってしまう(^^;
で、金額等を管理するためにさまざまな環境でCurrency型とかMoney型というデータ型が定義されているのだが、私の周りではこれを使っている例をあまり見ない。
私自身定義する際にはたいてい倍精度浮動小数点型を使うことがほとんど。
そこでちょっといろいろな処理系の通貨型について調べてみた。

<DBMS> <
DBMS名名称精度
Informixmoney
PostgreSQLMoney-21,474,836.48~ +21,474,836.47
Accesscurrency,money-922,337,203,685,477.5808~+922,337,203,685,477.5807
MS SQL Servermoney
smallmoney
-922,337,203,685,477.5808~+922,337,203,685,477.5807
-214,748.3648 ~ +214,748.3647
OracleN/AN/A
DB2N/AN/A
Sybasemoney
smallmoney
PostgreSQL
注意: moneyは使用しないようにしてください。代わりにnumeric、もしくはdecimalをto_char関数と組み合わせて利用してください。
いきなり驚いた(^^;
実装はされてるが使うなと。理由はマニュアルレベルでは書かれていないが、こんな4バイト浮動小数点精度では、インフレのきつい国の通貨は扱えねえ。日本でも国家予算どころかうちの会社のP/Lすら扱えません。確かにこりゃボツだわさ。
SQL Serverなどで採用されている8バイト型なら900兆まで扱えるので日本のGDP(約500兆)はなんとかなりそうだ。こっちのsmallmoneyは小数点の精度が高いのが特徴~

<言語>

言語名名称精度
CN/AN/A
VBCurrency-922,337,203,685,477,5808~+922,337,203,685,477,5807
COBOLN/A9(999V9999)とかほぼ無限?
型宣言しない言語も多いし。当たり前だけどMSファミリーの有効範囲はそろってる。でも型名は違う。SQL ServerはSybase時代の名残かしら?

通貨型は一応、ロケールによって表示フォーマットなどをデフォルトセットできたりする点がメリットなんだろうと思うが、プラットホーム間互換性といった移植性や、設計者自身の勘違いを防ぐためにも利用しないほうがやっぱりよさそうだ。 [2014-02-11追記] ちょっとだけ考察してみた。 Currency型の掘り下げをしてみる

|

« varchar(1)のデフォルト値 | トップページ | cshの憂鬱 »

コメント

PostgreSQLですが、いつのまにかMoney型の仕様が変更になっていてました。
http://kashi.way-nifty.com/jalan/2009/03/postgresqlmoney.html
に追記しておきました。

投稿: かっしい | 2009.03.31 17:58

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/2022/12400800

この記事へのトラックバック一覧です: Currency型を考えてみる:

« varchar(1)のデフォルト値 | トップページ | cshの憂鬱 »