- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA "double"から0.1を引くと・・・)
VBAのdouble型から0.1を引くと桁がおかしくなる理由と解決方法
このQ&Aのポイント
- エクセルVBAでdouble型の変数に-80を代入し、0.1ずつ引いていくと、途中から桁がおかしくなる現象が起きます。これは、double型の精度の限界によるものです。double型は2進数で数値を表現するため、10進数の小数を完全に表現できません。そのため、少数の計算を繰り返すと、誤差が累積し、桁がおかしくなることがあります。
- この現象を回避するためには、double型ではなくDecimal型を使用することが推奨されています。Decimal型は10進数で数値を表現するため、小数の計算を正確に行うことができます。また、計算の途中で誤差が累積しないため、桁がおかしくなることもありません。
- したがって、VBAで小数の計算を正確に行いたい場合は、double型ではなくDecimal型を使用するようにしましょう。Decimal型は数値の精度が高いため、桁がおかしくなる問題を回避することができます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
端的に言えば、コンピュータの宿命というか、そういう仕様です。 http://d.hatena.ne.jp/satakesatake/20090522/1242988375 など、「浮動小数点」でネット検索してみてください。 人間では、0.1という数字ですが、コンピュータの内部では0.1ではないのです。 回避方法としては、有効桁数 この場合、小数点以下1位 ですので、本来の値を10倍して、整数として計算して、出力時だけ、計算値を10分の1 のDoubleにしてはいかがでしょうか?
その他の回答 (1)
- nora1962
- ベストアンサー率60% (431/717)
回答No.2
浮動小数点型で小数点以下の値を含む場合は基本、誤差を生じます。 ネット検索で「浮動小数点、誤差」で検索すれば詳しい解説が出てきますよ。 対応方法としてはcurrency型やa@のような接尾辞を用いてdecimal型にする(これはかなり古い仕様ですが)あたりでしょうか。
質問者
お礼
回答ありがとうございます。 浮動小数点の仕組みなんだろうなあと思っていたら、やはり そうでしたか。 調べてみたら、自己解決しました。 10分の1するのにも、「test*0.1」ではだめで 「test / 10」にすると大丈夫でした。 回答ありがとうございます。
お礼
回答ありがとうございます。 浮動小数点の仕組みなんだろうなあと思っていたら、やはり そうでしたか。 調べてみたら、自己解決しました。 10分の1するのにも、「test*0.1」ではだめで 「test / 10」にすると大丈夫でした。 回答ありがとうございます。