指定された 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
コメント