テキストボックスの値をインクリメントするときにコードが有効数字を保持していない理由がわかりません。vbaのテキストボックスの値を増やしても均等にキャンセルされない
私は、スピンコントロール(テキストボックスと2つの小さなコマンドボタンを使用して、テキストボックスの値を上下に移動できます)をフォーム上に持っています。
テキストボックスのデフォルト値はゼロです。
上矢印コマンドボタンは、テキストボックスの値を+ 0.1だけ増やす必要があります。コードは次のとおりです。
下矢印コマンドボタンは、テキストボックスの値を-0.1だけインクリメントする必要があります。ここでは、コードは次のようになります。
Private Sub cmdIndexSpinDown_Click()
If Me!txtIndexSpin <= -1.5 Then
MsgBox "The minimum Index adjustment has been reached."
Exit Sub
Else
Me!txtIndexSpin = Me!txtIndexSpin - 0.1
End If
End Sub
だから私は、私はかつて一度ダウンスピンアップあればデフォルト値の0から、私は正常に動作し0に戻る必要があることを期待します。 2回スピンアップして2回スピンアップすると、テキストボックスの値が0ではなく2.77555756156289E-17になります。
さらにテストした後、クリック数に基づいて一貫して発生するわけではありませんが、クリック間の時間。より迅速に、このエラーが発生しやすくなります。
これがどうして起こりますか?
私は何も間違っているとは思えないので、私はそれをコードするつもりですが、私が何が欠けているのか不思議です。
これは[浮動小数点数学は壊れていますか?](http://stackoverflow.com/questions/588004/is-floating-point-math-broken)と似ていますが、それが重複しているかどうかはわかりませんしかし、。何がもっと必要ですか? – HansUp
他の人が指摘しているように、これは浮動小数点数学の問題です。通貨または小数点データ型(http://stackoverflow.com/documentation/vba/3418/data-types-and-limits)を使用してこれを避けると、10進数の精度が上がり、丸めの可能性が実際には回避されますエラー。彼らは計算上いくぶん遅いことに注意してください。 – Mikegrann
@HansUpそれはトリックでした。私はちょうど今これを学んでいる恥ずべきです! @ChristopherD。 – MoondogsMaDawg