VB6メモ:独自関数:四捨五入

本日、仕事のプログラミングで計算結果がどうしても微妙に値がずれてしまう不具合があったのでメモしておきます。


私はずっとRound関数が四捨五入の関数と思っていましたが、どうも違ったのですね。


調べてみるとRound関数は下記のような動きをするようです。




Round(1.5) ⇒ 2
Round(2.5) ⇒ 2

このようになり、Round関数は最も近い偶数に丸められるようです。


これではちょっと困ってしまうので、独自関数を作りました。


Round関数と同じように小数桁も指定できるようにしています。




'四捨五入(Roundは偶数に近い整数を返す関数の為)
Public Function Round2(ByVal num As Double, Optional ByVal digit As Long = 0) As Double
'引数:
' num:四捨五入する数値
' digit:四捨五入する小数点(省略可)
'戻値:
' numを四捨五入した値

Dim tmpNum As Double

tmpNum = num * 10 ^ digit

If tmpNum > 0 Then
Round2 = Fix(tmpNum + 0.5) / 10 ^ digit
ElseIf tmpNum < 0 Then
Round2 = -Fix(-tmpNum + 0.5) / 10 ^ digit
End If

Exit Function

End Function

そんなに難しいものではありませんが解説しますと、四捨五入したい値に0.5を足してFix関数で小数点以下を切り捨てています。



ここでは独自関数を作りましたが、実はFormat関数を使えば四捨五入はできるそうです。


しかしFormat関数ではWindowsXPのSPなしでは正常に動作しないらしいので使う気になりませんでした。



ちなみにEXCEL関数のROUNDは四捨五入らしいです。…紛らわしいなあ…


VBはExcelVBAから入ったので余計に勘違いしていました。


Application.RoundUpとかApplication.RoundDownってVB関数じゃなくてExcel関数だったんですね。


四捨五入は良く使うのでちゃんと覚えておこう…






コメント
コメントする








    
この記事のトラックバックURL
トラックバック