- PR -

DB2のROUNDの結果がおかしい

1
投稿者投稿内容
take
大ベテラン
会議室デビュー日: 2004/08/13
投稿数: 177
お住まい・勤務地: 沖縄県北部
投稿日時: 2006-02-20 20:15
いつもお世話になります。DB2 8.0です。
単純なROUND関数を使用していますが、意図した結果が得られません。
試したTESTSQLは下記のとおりです。

SELECT ROUND(DOB_VAL,1) V1,ROUND(6.25,1) V2,ROUND(DOUBLE(6.25),1) V3,
ROUND(DOUBLE(6.26),1) V4,ROUND(DOUBLE(6.25000000001),1) V5
FROM T_TAKE_TEST;

結果

V1 V2 V3 V4 V5
----- ----- ----- ----- -----
6.2 6.3 6.2 6.3 6.3

DOUBLE型の6.25を少数第1位を残すようにROUNDしています。
結果は6.3になると思っていました。ならないんですね。(V3です)
というかDOUBLE型の特性なのかどうなのかを調べているのですが、
なかなか有力な情報にたどり着けません。
ご存知の方がいらっしゃいましたらご教示願います。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-20 20:23
結果を見ると、偶数丸めのように見えますね。
もし、ROUND(DOUBLE(6.35), 1) を試して 6.4 になれば「偶数丸め」ですね。

でも、

  DB2 UDB の ROUND関数は四捨五入か

四捨五入だとハッキリ言ってますね。(~_~;)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
take
大ベテラン
会議室デビュー日: 2004/08/13
投稿数: 177
お住まい・勤務地: 沖縄県北部
投稿日時: 2006-02-20 20:49
じゃんぬねっとさんご返答ありがとうございます。

DOUBLEでやると精度は保障されませんみたいな
こと言ってますね!decimalにしないとだめって・・・
コンピュータは2進数でデータを扱うから仕方がないとか・・・。

プロジェクト終盤でソースコード全部見直しかー(泣)

参考になりました。ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)