• ベストアンサー

INT関数のバグ?

テーブルの数値2つを掛けて下2桁で切り捨てる処理が必要になりました。 INT([数量1]*[数量2]*100)/100 で処理しているんですが。 [数量1]=800 [数量2]=0.018 の時に14.39になってしまします。 (数量2が0.18の時も0.0018の時もちゃんと処理されます。) INT(INT([数量1]*[数量2]*10000)/100)/100 で現在処理しています。 元の関数の書き方に何か問題が在るかどうか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.4

Int(CCur([数量1]*[数量2]*100)) / 100 でどうでしょうか。 Int関数の引数である数式の演算結果が、倍精度浮動小数点数型 (Double) の数値と なっていることから、誤差となるのではないでしょうか。

datasraimu
質問者

補足

Int(CCur([数量1]*[数量2]*100)) / 100 のCCurは関数ですか?自分のACCESS2000では使用できないみたいです…。 因数は倍精度浮動小数点数型ですが演算結果には形式が指定できないみたいです。

その他の回答 (6)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.7

> CCUR使えました、しかし14.39のままでダメでした。 うぅ~ん。タッタこれだけのコメントですか。困りましたね。 では、新しいmdbで次のように操作して確認してみてください。 テーブルの新規作成で、次の2つのフィールドを設定します。 [数量1] 数値型 (一応、倍精度浮動小数点型とします。) [数量2] 数値型 (  〃  ) 「テーブル1」の名前を付けて保存します。 テーブルを開き、1レコードに次の数値を入力し、テーブルを閉じます。 [数量1] = 800 [数量2] = 0.018 クエリの新規作成のデザインビューで、「テーブル1」を追加します。 [数量1]と[数量2]を下側のQBEグリッドにドラッグします。 その右側の新規の「フィールド」欄に次の1行をコピーして貼り付けます。 通貨型: Int(CCur([数量1]*[数量2]*100))/100 さらにその右の新規「フィールド」欄に次の1行をコピーして貼り付けます。 倍精度浮動小数点型: Int([数量1]*[数量2]*100)/100 このクエリを保存後、実行してみてください。 数量1   数量2   通貨型   倍精度浮動小数点型 ---------------------------------------------------------  800   0.018    14.4       14.39 のようになりませんか? あとは、実情に合わせて応用し、自己解決してください。

datasraimu
質問者

お礼

すみません、出来ました。 クエリの内容見直してミスが在りました。 何度もお付き合い頂いて有難う御座いました。

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.6

> CCurは関数ですか? 勿論そうです。 > 自分のACCESS2000では使用できないみたいです…。 そんなことは無いと思いますよ。97でも2000でも2003でも使えます。確認しています。 もし、本当に使えないのなら、次の手順で操作してみてください。 オブジェクトから「モジュール」-->[新規作成]で開いたVBEメニューで [ツール]-->[参照設定]で「参照可能なライブラリ ファイル」の中で 「参照不能」になっているものが、ありませんか? もし、「参照不能」があったら、その名称をメモし、一旦チェックを外し、 [OK]し、再度リストから探し、チェックを付け直します。 これでもダメなら、ちょっと異常ですね。

datasraimu
質問者

補足

CCUR使えました、しかし14.39のままでダメでした。

  • suna4903
  • ベストアンサー率40% (13/32)
回答No.5

ACCESS2000を使っていて、数値1、数値2が倍精度浮動小数点数型となると、丸め誤差が出る場合がありますよ。 私は精度が必要な場合は誤差を出さないようにするために、通貨型を使ってました。 昔ほかの人が作ったシステムで、消費税の計算で誤差が出ていていたのですが、その原因がフィールドのデータ型が倍精度浮動小数点型だったという悲しい経験がありました・・・^^;>

datasraimu
質問者

補足

上の様にCCURを使ってみましたがダメでした。

  • jindon
  • ベストアンサー率43% (50/116)
回答No.3

数量2の 0.018は 0.1799999ではないですか? ROUND関数で小数を丸めるといいのでは?

datasraimu
質問者

補足

ROUNDを追加しましたがダメでした。

  • marumets
  • ベストアンサー率42% (199/463)
回答No.2

EXCEL2000ですが、INT(800*0.018*100)/100で14.4となりましたけど。 rounddown([数量1]*[数量2],2) ではどうですか。

datasraimu
質問者

補足

すみませんACCESS2000でROUNDDOWNが使用できません。

  • suna4903
  • ベストアンサー率40% (13/32)
回答No.1

使っているアプリケーションがわからないのではずしているかもしれませんが、プログラム言語を使っているのであれば、数値1、数値2の型が浮動小数点数型などを使っているのではないでしょうか? VBであれば、Currencyなどを使えば発生しないと思います。

datasraimu
質問者

補足

申し訳ありませんACCESS2000です。 データ型は倍精度浮動小数点数型を使用しています。

関連するQ&A