• ベストアンサー

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

  • Access97 Int関数

    小数点の切り捨てをしたくてクエリーで 以下の計算をしてみました。 =Int([個数]*[単価]) ところが以下の数値で計算させると結果が 50232となると思うのですが50231となってしまいます。 数量:460 単価:109.2 結果:50231(電卓で計算すると50232) 結果が小数点になるときは問題ないようです。 使い方が間違っているのでしょうか。 こういう場合Int関数を使うのが誤りなのでしょうか? だとしたら他に当てはまる関数があるのでしょうか? ちなみにテーブルの定義としては 数量:長整数型(小数点以下桁数0) 単価:単精度浮動小数点型(小数点以下桁数0) となっていますが小数点は表示されています。

  • awk の int()に関数について

    数値処理でawkを使い始めているのですが, int関数を使って小数を切り捨てたいのですが, 以下のような現象が起こって困っています。 print int(9.53*100) 952 ? print int(9.53*1000) 9530 OK print int(65.52*1000) 65519 ? print int(65.52*1000.0+0.1) 65520 ? int関数はどういう動作をするのかどなたかご教示いただけますでしょうか。 お願いいたします。

  • Excel 四捨五入の関数?

    次のような処理を行いたいのですが、関数がわかりません。 (1)数値の下三桁が500以上(500~999)だったら、1000にする。 (2)数値の下三桁が500以下(1~499)だったら、0にする。 (1)と(2)をIF文なんかでやれるといいのですが・・・。 お分かりになる方、教えてください。 よろしくお願いします。

  • EXCELのINT関数・ROUNDDOWN関数について

    情報処理の問題で関数を使うように指示されました。 「国税=分配金×0.07(整数未満切り捨て)地方税=分配金×0.03(整数未満切り捨て)」 私はINT関数を使い答えを出しましたが、回答はROUDDOWN関数を使っています。 整数未満切捨ての場合は、INT関数を使うのがいいと思うのですが、ROUDDOWN関数を使うほうがいいのでしょうか。

  • 数値型にしたい

    品番と数量があるクエリがありこちらをテーブル作成する際に数値型にしたいです。 データ上 数量が四桁で710が0710となっています。 関数とか使うのでしょうか

  • INT関数で

    初歩的な質問で申し訳ないのですが、 A1セル:1.5 A2セル:2.3 A3セル:3.6 とあったと仮定しまして、 A4セルに合計を出すのですが、普通にSUMで合計すると7.4となります。 今回の条件として整数にしなくてはなりません。 合計した値をINTで整数だけ抜くと7という解になりますが、 INTで抜き出した後合計すると6という解になります。 「INTで抜き出した整数の合計を求める」関数をA4セルにいれて処理したのですが、どうしたらいいのでしょうか。 宜しくお願い致します。

  • INT関数について

    ExcelのINT関数って、具体的にどのような時に使うのですか? イメージが湧かないので、今まで利用した事がありません。 是非教えて下さい。よろしくお願いします。

  • INT関数について アクセス2000です

    いつもお世話になります。 アクセス2000を使用しております。 テーブルに8.2と3600の数字が格納されています。 フィールドサイズは倍精度浮動小数点型です。 クエリーをつかって積を求めると、通常に計算すると29520が表示されます。その他の計算結果で少数点以下が出てきますので小数点以下を切り捨てたいのでINT関数を使うと29519と表示されます。 本来INT関数は、29520に対しては29520を返すと思うのですが、どうしたらいいのでしょうか。 小数点以下を切り捨てる方法を教えてください。

  • EXCELの関数、INT関数とROUNDDOWN関数の使いわけ

    EXCELの関数、INT関数とROUNDDOWN関数はどういうときに使い分けをするのでしょうか?教えてください。 =INT(8.9)では表示は8 =ROUNDDOWN(8.9,0)では表示は8 と同じ結果が得られますよね。 どういった時に使い分けをするのでしょうか?

  • ExcelのINT関数の計算結果がおかしい。

    ExcelのINT関数というよりも表計算ソフトのINT関数で 1, INT((4.645*100-464)*10)の結果は4 2, INT((464.5-464)*10)の結果は5 3, INT((4.745*100-464)*10)の結果は5 4, INT((474.5-464)*10)の結果は5 になってしまいます、これはWIn版Excel2000,2002,2007,Mac版2004 openoffice.org 2.2 google のスプレッドシート ExcelのVBAで同じ結果になりました。VB2005では1も結果が5になります。 ここで検索したところでは表計算ソフトは循環小数になった場合14桁で四捨五入するというようなことが書かれていますが、この場合4.645*10と464.5の違いだけなのでそれも当てはまらないように思えるのですが、また1と3で違いが内容に思えるのですが、どうしてこのようなことが起こるのでしょうか。教えてください。

専門家に質問してみよう