Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


32461 / 76734 ←次へ | 前へ→

【49509】Re:教えてください m(__)m
発言  ichinose  - 07/6/8(金) 6:51 -

引用なし
パスワード
   おはようございます。

>ROUND()関数をVBAのユーザー定義関数で使用しているのですが、
>ある計算値が0.105 これをROUND(計算値,2)とすると
>0.1になってしまいます。正解は0.11のはずなのですが
>なぜでしょう?

以下のコードを実行してみてください
'===========================================
Sub sample()
  Dim a As Double
  a = 0.105
  MsgBox Round(a, 2)
  MsgBox Application.Round(a, 2)
End Sub


昔、算数で習った四捨五入は、Application.Round こっちです。

Roundは、銀行型の四捨五入と いうんですって!!
意味は「銀行型の四捨五入」で検索してみてください(Google等で)。

このRound違いが原因でしょうか?

但し、Application.Roundでも りんさんが記述されていた

>浮動小数点問題で、0.105ではなく0.104999999みたいな値になってるのだと思います。
>なので計算にCurrency(通貨型、下4桁まで保障)を使用するか、Roundをかける時に>ROUND(計算値+0.000001,2)などとして調整するといいです。

は考慮しないと計算が合わない場合も出てくると思いますよ!!
何らかの演算結果を丸める場合は、対策が必要です。


とにかく、小数を扱う場合は、要注意です!!
7 hits

【49418】教えてください m(__)m prolinea 07/6/4(月) 20:25 質問
【49419】Re:教えてください m(__)m ponpon 07/6/4(月) 20:31 発言
【49420】Re:教えてください m(__)m prolinea 07/6/4(月) 20:43 質問
【49426】Re:教えてください m(__)m ponpon 07/6/4(月) 23:15 発言
【49506】Re:教えてください m(__)m prolinea 07/6/7(木) 21:43 お礼
【49508】Re:教えてください m(__)m りん 07/6/8(金) 3:22 発言
【49509】Re:教えてください m(__)m ichinose 07/6/8(金) 6:51 発言
【49510】Re:教えてください m(__)m 注意 07/6/8(金) 8:41 発言

32461 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free