2024年に成し遂げたこと

テーブルの数値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
で現在処理しています。

元の関数の書き方に何か問題が在るかどうか教えてください。

A 回答 (7件)

Int(CCur([数量1]*[数量2]*100)) / 100


でどうでしょうか。

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

この回答への補足

Int(CCur([数量1]*[数量2]*100)) / 100
のCCurは関数ですか?自分のACCESS2000では使用できないみたいです…。

因数は倍精度浮動小数点数型ですが演算結果には形式が指定できないみたいです。

補足日時:2004/06/24 08:11
    • good
    • 0

> 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

のようになりませんか?

あとは、実情に合わせて応用し、自己解決してください。
    • good
    • 0
この回答へのお礼

すみません、出来ました。

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

お礼日時:2004/06/25 17:01

> CCurは関数ですか?



勿論そうです。

> 自分のACCESS2000では使用できないみたいです…。

そんなことは無いと思いますよ。97でも2000でも2003でも使えます。確認しています。
もし、本当に使えないのなら、次の手順で操作してみてください。

オブジェクトから「モジュール」-->[新規作成]で開いたVBEメニューで
[ツール]-->[参照設定]で「参照可能なライブラリ ファイル」の中で
「参照不能」になっているものが、ありませんか?

もし、「参照不能」があったら、その名称をメモし、一旦チェックを外し、
[OK]し、再度リストから探し、チェックを付け直します。

これでもダメなら、ちょっと異常ですね。

この回答への補足

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

補足日時:2004/06/24 12:30
    • good
    • 0

ACCESS2000を使っていて、数値1、数値2が倍精度浮動小数点数型となると、丸め誤差が出る場合がありますよ。


私は精度が必要な場合は誤差を出さないようにするために、通貨型を使ってました。

昔ほかの人が作ったシステムで、消費税の計算で誤差が出ていていたのですが、その原因がフィールドのデータ型が倍精度浮動小数点型だったという悲しい経験がありました・・・^^;>

この回答への補足

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

補足日時:2004/06/24 12:31
    • good
    • 0

数量2の


0.018は

0.1799999ではないですか?

ROUND関数で小数を丸めるといいのでは?

この回答への補足

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

補足日時:2004/06/23 17:53
    • good
    • 0

EXCEL2000ですが、INT(800*0.018*100)/100で14.4となりましたけど。



rounddown([数量1]*[数量2],2)
ではどうですか。

この回答への補足

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

補足日時:2004/06/23 17:46
    • good
    • 0

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



VBであれば、Currencyなどを使えば発生しないと思います。

この回答への補足

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

補足日時:2004/06/23 17:44
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報