« 文字列型の憂鬱(3) | トップページ | 数値型の憂鬱(2) »

2008年6月 6日 (金)

数値型の憂鬱

今回は数値型の憂鬱である。

たいていのデータベースには、高精度の数値を表すデータ型が用意されている。DB2で言えば、DECIMAL/NUMERIC型で、最大精度31桁の巨大な数値を表現することができる。何が憂鬱かというと、これら高精度の数値をクライアント・アプリケーションで入出力するだけなら、高精度の数値を文字列として入出力すれば楽であるが、クライアント・アプリケーションでこられの数値を演算したり比較したりするとなると、途端に面倒になるのである。

というのも、たいていのクライアント・アプリケーションの開発環境では、このような高精度の数値を表現するデータ型がデフォルトで用意されていないからである(JavaならBigIntegerBigDecimalクラス、.NETならDecimal型が用意されているが・・)。

ちなみに、ODBCではこれら高精度の数値を表現するCデータ型としてSQL_C_NUMERICが用意されていて、SQL_NUMERIC_STRUCT構造体として入出力することもできる。SQL_NUMERIC_STRUCT構造体は次のようになる。

Numeric1_3   

precisionフィールドは有効桁数、scaleフィールドは小数点の位置、signフィールドは符号を表し、valフィールドにはスケールされた数値(整数値として)が格納される。ちなみに、valフィールドは16バイト長なので、2の128(16*8)乗つまり最大精度約38桁までの数値を表現できることになる。

と、高精度の数値を表すCデータ型が用意されているのであるが、加減乗除などの演算や比較を行うためのルーチンが用意されていないので、自前で用意するなどしなければならず頭が痛いのであるsad。ちなみに、SQL_NUMBER_STRUCTの使い方はここ

« 文字列型の憂鬱(3) | トップページ | 数値型の憂鬱(2) »

DB2」カテゴリの記事

Oracle」カテゴリの記事

データベース」カテゴリの記事

コメント

コメントを書く

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

トラックバック

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

この記事へのトラックバック一覧です: 数値型の憂鬱:

« 文字列型の憂鬱(3) | トップページ | 数値型の憂鬱(2) »

自作ソフトウェア

無料ブログはココログ

メモ