• 締切済み

丸め処理の対策はどうすれば良い?

VBでプログラムしているのですが 小数点の丸め処理で困っています 対策として よく「Currency型にすれば良い」 というのは 見るのですが Currency型にすると 小数点第4桁までしか あつかえません 小数点第4桁以下 計算の計算も正確に したい場合は どうすれば良いのでしょうか? 宜しくお願いします

みんなの回答

noname#22222
noname#22222
回答No.5

s_husky です。 昨晩は、型を示しただけでしたので補足します。 Double型を利用した場合、有効桁数=小数点以下第5位という考えを採用することになると思います。 そういう意味では、次のように小数点以下第6位、第7位の丸めが問題になります。 ? Rounds(0.000015, 0, 5) ' 0=四捨五入 0.00002 ? Rounds(0.000019, 1, 5) ' 1=切り捨て 0.00001 ? Rounds(0.000011, 2, 5) ' 2=切り上げ 0.00002 ? Rounds(0.0000007, 1, 6) ' 無条件切り捨て 0 ? Rounds(Rounds(0.0000101, 1, 6), 2,5) <-- 7桁以下は切り捨て6桁を切り上げる 0.00001 Public Function Rounds(ByVal M As Double, _             ByVal A As Integer, _             Optional D As Integer = 0) As Variant     Rounds = Sgn(M) * Fix(Abs(M) * 10 ^ D + Abs((A = 0) * 0.5@ + (A = 2) * (Int(M * 10 ^ D) <> (M * 10 ^ D)))) / 10 ^ D End Function ※Double型を使えば全てが解決する訳ではないので補足した次第です。

okb
質問者

お礼

回答ありがとう御座います

noname#22222
noname#22222
回答No.4

s_husky です。 Private Sub コマンド0_Click()   Dim dblA As Double      dblA = 0.11111   MsgBox dblA End Sub という手もあります。

noname#22222
noname#22222
回答No.3

Currency型にすると小数点第4桁までしかあつかえません 意味が判りません! 具体例で示してもらえますか?

okb
質問者

補足

すみません たとえば Dim curA As Currency curA = 0.11111 としても curAには0.1111 しか入らないということです これではcurAを つかって正確な計算が出来ない 事が問題と言うことです

回答No.2

四捨五入でいいですか? Format関数を使います。

okb
質問者

お礼

回答ありがとう御座います

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

勘違いしてたらごめんなさい。 Currency 型は、小数点4桁ですが、要は、64ビットの整数と同じですから、 仮に10000してあるとして計算すれば、小数点8桁の計算ができます。

okb
質問者

お礼

回答ありがとう御座います

関連するQ&A