お世話になります。
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
となっていました。
誤差の解消方法をお願いいたします。
「浮動小数点数 誤差」でWEB検索してみてください。正確な計算をおこないたいときは、使えないものだと分かるでしょう。
また、変数はきちんと型を指定して宣言しましょう。型宣言無しに小数を代入すると浮動小数点数になります。
小数点4桁までなら、通貨型を使うと誤差のない計算ができます。
ありがとうございました。
通貨型の使い方を理解していなかったです。