VB.NET Tips - 指定した精度の桁数に数値を切り上げ
指定された Decimal Double Long の値を、指定された桁で切り上げる関数です。
指定された値が正の場合は、有効桁数の10の累乗で割ったものを Math.Ceiling 関数で最小の整数値を求めて、更に累乗値を掛けてやります。
指定された値が負の場合は、有効桁数の10の累乗で割ったものを Math.Floor 関数で最小の整数値を求めて、更に累乗値を掛けてやります
テストプログラムの動作としては、Double値が「123456」で有効桁数が「3」の場合、「123456」を先ず「1000」で割って「123.456」となり
Math.Ceiling 関数を通すことで「124.000」となり結果「124000」が関数戻り値となります。
指定した精度の桁数に数値を切り上げ
09 | Public Function RoundUp( ByVal Val As Double , ByVal intUnit As Integer ) As Double |
10 | Dim dblPow As Double = System.Math.Pow(10, intUnit) |
14 | Return System.Math.Ceiling(Val / dblPow) * dblPow |
17 | Return System.Math.Floor(Val / dblPow) * dblPow |
21 | Public Function RoundUp( ByVal Val As Decimal , ByVal intUnit As Integer ) As Decimal |
22 | Dim decPow As Decimal = System.Math.Pow(10, intUnit) |
26 | Return System.Math.Ceiling(Val / decPow) * decPow |
29 | Return System.Math.Floor(Val / decPow) * decPow |
33 | Public Function RoundUp( ByVal Val As Long , ByVal intUnit As Integer ) As Long |
34 | Dim decPow As Decimal = System.Math.Pow(10, intUnit) |
37 | Return System.Math.Ceiling(Val / decPow) * decPow |
39 | Return System.Math.Floor(Val / decPow) * decPow |
46 | Private Sub BtnRoundUp_Click(sender As Object , e As EventArgs) Handles BtnRoundUp.Click |
48 | Dim decData As Decimal = 123456 |
49 | Dim dblData As Double = 123456 |
50 | Dim lngData As Long = 123456 |
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 |
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 |