次の方法で共有

AccessのInt関数を使った四捨五入のズレについて

Anonymous
2017-07-10T02:45:51+00:00

テーブルAに

[数量](倍精度浮動小数点型)

[単価](倍精度浮動小数点型)

[金額](長整数型)

があります。

フォームにて[数量]と[単価]を更新すると

[金額]に四捨五入した数値を入れたいと思います。

[単価]の更新処理後のイベントプロシージャにて

Me.金額 = Int((Me.数量 * Me.単価) + 0.5)

としてしています。

数量に「33.05」

単価に「350」を入力すると

金額には「11567」と表示されます。

しかし本来は「11568」とならなければならないはずですが・・・

ためしにテキストボックスのコントロールソースに

「=Int(([数量]*[単価])+0.5)」と記入すると

計算結果は「11568」と正常な数値が表示されます。

2進数のため・・・というのは聞いたことがあるのですが

テキストボックスやクエリと結果が違うので・・・

Win10+Access2016を使用しています。

よろしく願いいたします。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2017-07-10T16:50:27+00:00

浮動小数点数の演算誤差ですね。

VBAのコード中で型指定なしで小数値を記述すると、単精度浮動小数点型になりますので。

通貨型なら演算誤差はでないので、下記のように通貨型に変換して演算すればいいでしょう。

Me.金額 = Int((Me.数量 * Me.単価) + CCur(0.5))

テキストボックスでは、通貨型がデフォルトなのかな。

=Int(([数量]*[単価])+CSng(0.5))

というように単精度に変換して演算すると、「11567」となりますね。

この回答は役に立ちましたか?

7 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

2 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2017-07-11T01:47:17+00:00

    ありがとうございました。

    提示していただいた式で無事解決することができました。

    テーブルで単価等は通貨型に変えたりしてもダメだったのでですが

    「0.5」の部分も通貨型にしなければならなかったのですね。

    しかしテキストボックス内の計算式の扱いにも注意が必要ですね・・・

    大変助かりました。ありがとうございました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2017-07-11T01:14:11+00:00

    > テキストボックスでは、通貨型がデフォルトなのかな。

    クエリや演算テキストボックス上では十進型( Decimal )ですね。

    ( TypeName 関数の戻り値で判別可能)

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません