過去ログ

                                Page     446
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼クエリーの集計について  AC初心者 03/11/28(金) 10:24
   ┗Re:クエリーの集計について  しろくろやぎ 03/11/28(金) 13:24

 ───────────────────────────────────────
 ■題名 : クエリーの集計について
 ■名前 : AC初心者
 ■日付 : 03/11/28(金) 10:24
 -------------------------------------------------------------------------
   Aテーブルに「結果」という数値型(倍精度浮動小数点型)のフィールドがあります。
「結果」にはユーザーがフォームにて入力した数字の値が入ります。
その値をクエリーにて別のフィールドでグループ化し、「結果」フィールドの合計をとると小数点が限りなく入っているデータになってしまいます。
「結果」を1件ずつ見ると0.7や0.8といった小数点第一位までのデータしか存在していないのです。
このような現象は何故おこるのでしょうか?
申し訳ありませんがよろしくお願い致します。

 ───────────────────────────────────────  ■題名 : Re:クエリーの集計について  ■名前 : しろくろやぎ  ■日付 : 03/11/28(金) 13:24  -------------------------------------------------------------------------
   ▼AC初心者 さん Wrote:
>Aテーブルに「結果」という数値型(倍精度浮動小数点型)のフィールドが
>あります。
>「結果」にはユーザーがフォームにて入力した数字の値が入ります。
>その値をクエリーにて別のフィールドでグループ化し、「結果」フィールド
> の合計をとると小数点が限りなく入っているデータになってしまいます。

結論から言うと、それは浮動小数点型の特性(バグではない)です。
コンピュータ内での数字を扱う時、内部では2進数で表現するのですが、
小数点以下の数値を完全に正しく常に保持する事はできません。

>「結果」を1件ずつ見ると0.7や0.8といった小数点第一位までの
> データしか存在していないのです。

小数点以下の桁数が1〜4ぐらいと決まっているなら通貨型(Currency)
を使われると良いでしょう。
通貨型は内部で値を1万倍し、4桁までの小数点以下を整数化する事で
演算時の誤差が出ないようにしています。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 446