- 締切済み
丸め処理の対策はどうすれば良い?
VBでプログラムしているのですが 小数点の丸め処理で困っています 対策として よく「Currency型にすれば良い」 というのは 見るのですが Currency型にすると 小数点第4桁までしか あつかえません 小数点第4桁以下 計算の計算も正確に したい場合は どうすれば良いのでしょうか? 宜しくお願いします
- みんなの回答 (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型を使えば全てが解決する訳ではないので補足した次第です。
s_husky です。 Private Sub コマンド0_Click() Dim dblA As Double dblA = 0.11111 MsgBox dblA End Sub という手もあります。
Currency型にすると小数点第4桁までしかあつかえません 意味が判りません! 具体例で示してもらえますか?
補足
すみません たとえば Dim curA As Currency curA = 0.11111 としても curAには0.1111 しか入らないということです これではcurAを つかって正確な計算が出来ない 事が問題と言うことです
- otto0001otto
- ベストアンサー率25% (64/249)
四捨五入でいいですか? Format関数を使います。
お礼
回答ありがとう御座います
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
勘違いしてたらごめんなさい。 Currency 型は、小数点4桁ですが、要は、64ビットの整数と同じですから、 仮に10000してあるとして計算すれば、小数点8桁の計算ができます。
お礼
回答ありがとう御座います
お礼
回答ありがとう御座います