VB.NET Tips - 指定した精度の桁数に数値を切り上げ

指定された Decimal Double Long の値を、指定された桁で切り上げる関数です。

指定された値が正の場合は、有効桁数の10の累乗で割ったものを Math.Ceiling 関数で最小の整数値を求めて、更に累乗値を掛けてやります。 指定された値が負の場合は、有効桁数の10の累乗で割ったものを Math.Floor 関数で最小の整数値を求めて、更に累乗値を掛けてやります

テストプログラムの動作としては、Double値が「123456」で有効桁数が「3」の場合、「123456」を先ず「1000」で割って「123.456」となり Math.Ceiling 関数を通すことで「124.000」となり結果「124000」が関数戻り値となります。

指定した精度の桁数に数値を切り上げ

01''' ------------------------------------------------------------------------
02''' <summary>
03''' 指定した精度の数値の切り上げ
04''' </summary>
05''' <param name="Val">丸め対象の倍精度浮動小数点数
06''' <param name="intUnit">戻り値の有効桁数の精度
07''' <returns>切り上げられた数値。</returns>
08''' ------------------------------------------------------------------------
09Public Function RoundUp(ByVal Val As Double, ByVal intUnit As Integer) As Double
10    Dim dblPow As Double = System.Math.Pow(10, intUnit)
11 
12    If Val > 0 Then
13        'Ceiling:指定した倍精度浮動小数点数以上の数のうち、最小の整数値を返します
14        Return System.Math.Ceiling(Val / dblPow) * dblPow
15    Else
16        'Floor:指定した倍精度浮動小数点数以下の数のうち、最大の整数を返します
17        Return System.Math.Floor(Val / dblPow) * dblPow
18    End If
19End Function
20 
21Public Function RoundUp(ByVal Val As Decimal, ByVal intUnit As Integer) As Decimal
22    Dim decPow As Decimal = System.Math.Pow(10, intUnit)
23 
24    If Val > 0 Then
25        'Ceiling:指定した 10 進数以上の数のうち、最小の整数値を返します
26        Return System.Math.Ceiling(Val / decPow) * decPow
27    Else
28        'Floor:指定した 10 進数以下の数のうち、最大の整数を返します
29        Return System.Math.Floor(Val / decPow) * decPow
30    End If
31End Function
32 
33Public Function RoundUp(ByVal Val As Long, ByVal intUnit As Integer) As Long
34    Dim decPow As Decimal = System.Math.Pow(10, intUnit)
35 
36    If Val > 0 Then
37        Return System.Math.Ceiling(Val / decPow) * decPow
38    Else
39        Return System.Math.Floor(Val / decPow) * decPow
40    End If
41End Function
42 
43'*****
44'仮にテストプログラム
45'*****
46Private Sub BtnRoundUp_Click(sender As Object, e As EventArgs) Handles BtnRoundUp.Click
47    Try
48        Dim decData As Decimal = 123456
49        Dim dblData As Double = 123456
50        Dim lngData As Long = 123456
51 
52        Dim str As String = ""
53        str &= "Decimal:" & decData.ToString & "-->" & RoundUp(decData, 3).ToString & vbCrLf
54        str &= "Double :" & dblData.ToString & "-->" & RoundUp(dblData, 2).ToString & vbCrLf
55        str &= "Long   :" & lngData.ToString & "-->" & RoundUp(decData, 1).ToString & vbCrLf
56        decData = -decData
57        dblData = -dblData
58        lngData = -lngData
59        str &= "Decimal:" & decData.ToString & "-->" & RoundUp(decData, 3).ToString & vbCrLf
60        str &= "Double :" & dblData.ToString & "-->" & RoundUp(dblData, 2).ToString & vbCrLf
61        str &= "Long   :" & lngData.ToString & "-->" & RoundUp(decData, 1).ToString & vbCrLf
62        MsgBox(str)
63 
64    Catch ex As Exception
65        'エラー
66        MsgBox(ex.Message)
67    End Try
68End Sub

総アクセス数