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
トラックバック

search this site.

visitor

categories

フィロの村group

links

selected entries

archives

recent comment

  • Excel2007 VBA:リボンを(ちょっぴり)操作
    yui
  • VB6・VBAメモ:定数配列の代替案
    謎猫
  • VB6・VBAメモ:定数配列の代替案
  • VB6メモ:独自関数:配列の要素数
    謎猫
  • VB6メモ:独自関数:配列の要素数
    通りすがりなな
  • VB6メモ:独自関数:配列の要素数
    通りすがりなな
  • PHPメモ:英字スパム対策(再修正)
    謎猫
  • PHPメモ:英字スパム対策(再修正)
  • Excel VBAメモ:UBound関数と多次元配列
    medaka
  • Excel VBAメモ:UBound関数と多次元配列
    Ringo

Ring