指定された Decimal Double Long の値を、指定された桁で切り上げる関数です。
指定された値が正の場合は、有効桁数の10の累乗で割ったものを Math.Ceiling 関数で最小の整数値を求めて、更に累乗値を掛けてやります。 指定された値が負の場合は、有効桁数の10の累乗で割ったものを Math.Floor 関数で最小の整数値を求めて、更に累乗値を掛けてやります
テストプログラムの動作としては、Double値が「123456」で有効桁数が「3」の場合、「123456」を先ず「1000」で割って「123.456」となり Math.Ceiling 関数を通すことで「124.000」となり結果「124000」が関数戻り値となります。
指定した精度の桁数に数値を切り上げ
''' ------------------------------------------------------------------------
'''
''' 指定した精度の数値の切り上げ
'''
''' <param name="Val">丸め対象の倍精度浮動小数点数</param>
''' <param name="intUnit">戻り値の有効桁数の精度</param>
''' 切り上げられた数値。
''' ------------------------------------------------------------------------
Public Function RoundUp(ByVal Val As Double, ByVal intUnit As Integer) As Double
Dim dblPow As Double = System.Math.Pow(10, intUnit)
If Val > 0 Then
'Ceiling:指定した倍精度浮動小数点数以上の数のうち、最小の整数値を返します
Return System.Math.Ceiling(Val / dblPow) * dblPow
Else
'Floor:指定した倍精度浮動小数点数以下の数のうち、最大の整数を返します
Return System.Math.Floor(Val / dblPow) * dblPow
End If
End Function
Public Function RoundUp(ByVal Val As Decimal, ByVal intUnit As Integer) As Decimal
Dim decPow As Decimal = System.Math.Pow(10, intUnit)
If Val > 0 Then
'Ceiling:指定した 10 進数以上の数のうち、最小の整数値を返します
Return System.Math.Ceiling(Val / decPow) * decPow
Else
'Floor:指定した 10 進数以下の数のうち、最大の整数を返します
Return System.Math.Floor(Val / decPow) * decPow
End If
End Function
Public Function RoundUp(ByVal Val As Long, ByVal intUnit As Integer) As Long
Dim decPow As Decimal = System.Math.Pow(10, intUnit)
If Val > 0 Then
Return System.Math.Ceiling(Val / decPow) * decPow
Else
Return System.Math.Floor(Val / decPow) * decPow
End If
End Function
'*****
'仮にテストプログラム
'*****
Private Sub BtnRoundUp_Click(sender As Object, e As EventArgs) Handles BtnRoundUp.Click
Try
Dim decData As Decimal = 123456
Dim dblData As Double = 123456
Dim lngData As Long = 123456
Dim str As String = ""
str &= "Decimal:" & decData.ToString & "-->" & RoundUp(decData, 3).ToString & vbCrLf
str &= "Double :" & dblData.ToString & "-->" & RoundUp(dblData, 2).ToString & vbCrLf
str &= "Long :" & lngData.ToString & "-->" & RoundUp(decData, 1).ToString & vbCrLf
decData = -decData
dblData = -dblData
lngData = -lngData
str &= "Decimal:" & decData.ToString & "-->" & RoundUp(decData, 3).ToString & vbCrLf
str &= "Double :" & dblData.ToString & "-->" & RoundUp(dblData, 2).ToString & vbCrLf
str &= "Long :" & lngData.ToString & "-->" & RoundUp(decData, 1).ToString & vbCrLf
MsgBox(str)
Catch ex As Exception
'エラー
MsgBox(ex.Message)
End Try
End Sub
PR
コメント