Microsoft Access 掲示板

浮動小数の処理

2 コメント
views
4 フォロー

お世話になります。

txt001からtxt025という名前のテキストボックスがあり、その合計が100になるかのチェックをしたいです

For i = 1 to 25
set ctl = me.Controls("txt0" & Format (i,00)
dblSumFM = dblSumFM + Nz(ctl ,0)
set ctl = nothing
next i

if dblSumFM <> 100 then 
Msgbox "合計が" & dblSumFm & "です。100ではありません。"
exit function 
end if

以上としたところ、「合計が100です。100ではありません。」と表示されました。
倍精度型の変数が悪いのかと思いましたので、

lngSumFM = lngSumFM + Nz(Int(ctl * 1000),0)

としました。(テキストボックスの値は小数点3位までです)

ところが、まだ問題は解決しませんでした。
デバッグしたところ、
ctl=32.3
Int(ctl*1000)=32299
となっていました。

誤差の解消方法をお願いいたします。

nokonoko
作成: 2021/03/08 (月) 17:33:44
通報 ...
1

「浮動小数点数 誤差」でWEB検索してみてください。正確な計算をおこないたいときは、使えないものだと分かるでしょう。

また、変数はきちんと型を指定して宣言しましょう。型宣言無しに小数を代入すると浮動小数点数になります。

小数点4桁までなら、通貨型を使うと誤差のない計算ができます。

Dim SumFM As Currency
Dim ctl As TextBox
Dim i As Long
For i = 1 to 25
    set ctl = me.Controls("txt0" & Format (i,00))
    SumFM = SumFM + Nz(ctl ,0)
next i
2
nokonoko 2021/03/11 (木) 13:31:25 653a6@54883

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

通貨型の使い方を理解していなかったです。