電子書籍の厳選無料作品が豊富!

VBでプログラムしているのですが

小数点の丸め処理で困っています

対策として
よく「Currency型にすれば良い」
というのは
見るのですが

Currency型にすると
小数点第4桁までしか
あつかえません

小数点第4桁以下
計算の計算も正確に
したい場合は
どうすれば良いのでしょうか?
宜しくお願いします

A 回答 (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型を使えば全てが解決する訳ではないので補足した次第です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/03/22 13:50

s_husky です。



Private Sub コマンド0_Click()
  Dim dblA As Double
  
  dblA = 0.11111
  MsgBox dblA
End Sub

という手もあります。
    • good
    • 0

Currency型にすると小数点第4桁までしかあつかえません



意味が判りません!
具体例で示してもらえますか?

この回答への補足

すみません
たとえば

Dim curA As Currency

curA = 0.11111

としても
curAには0.1111
しか入らないということです

これではcurAを
つかって正確な計算が出来ない
事が問題と言うことです

補足日時:2006/03/20 21:22
    • good
    • 0

四捨五入でいいですか?



Format関数を使います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/03/22 13:49

勘違いしてたらごめんなさい。


Currency 型は、小数点4桁ですが、要は、64ビットの整数と同じですから、
仮に10000してあるとして計算すれば、小数点8桁の計算ができます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/03/22 13:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!