切り捨てを行うには「Math.Truncate」または「Math.Floor」を使用します。
切り捨て方法
「Math.Truncate」メソッドと「Math.Floor」の引数に少数を渡すと、小数第一位で切り捨てした結果を返します。-
C#
// 切り捨て(Math.Truncate) 切り捨て結果 = Math.Truncate(小数値); // 切り捨て(Math.Floor) 切り捨て結果 = Math.Floor(小数値);
-
VB.NET
' 切り捨て(Math.Truncate) 切り捨て結果 = Math.Truncate(小数値) ' 切り捨て(Math.Floor) 切り捨て結果 = Math.Floor(小数値)
「Math.Truncate」と「Math.Floor」の違い
両者は値が負数のときに結果が異なり、「Truncate」が「0に近づく」のに対し、「Floor」は「0から遠ざかる」ようになっています。どちらが正しいかは計算対象によって異なるため確認が必要です。次の表は「Truncate」と「Floor」の実行結果です。マイナス時の結果が異なるのが確認できます。切り捨てる前の値 | Truncateの結果 | Floorの結果 |
---|---|---|
0.1 | 0 | 0 |
0.9 | 0 | 0 |
1.1 | 1 | 1 |
1.9 | 1 | 1 |
-0.1 | 0 | -1 |
-0.9 | 0 | -1 |
-1.1 | -1 | -2 |
-1.9 | -1 | -2 |
切り捨てのサンプルコード
-
C#
// 切り捨て(Math.Truncate) double result01 = Math.Truncate(0.1); // 0 double result03 = Math.Truncate(1.1); // 1 double result11 = Math.Truncate(-0.1); // 0 double result13 = Math.Truncate(-1.1); // -1 // 切り捨て(Math.Floor) double result41 = Math.Floor(0.1); // 0 double result43 = Math.Floor(1.1); // 1 double result51 = Math.Floor(-0.1); // -1 double result53 = Math.Floor(-1.1); // -2
-
VB.NET
' 切り捨て(Math.Truncate) Dim result01 As Double = Math.Truncate(0.1) ' 0 Dim result03 As Double = Math.Truncate(1.1) ' 1 Dim result11 As Double = Math.Truncate(-0.1) ' 0 Dim result13 As Double = Math.Truncate(-1.1) ' -1 ' 切り捨て(Math.Floor) Dim result41 As Double = Math.Floor(0.1) ' 0 Dim result43 As Double = Math.Floor(1.1) ' 1 Dim result51 As Double = Math.Floor(-0.1) ' -1 Dim result53 As Double = Math.Floor(-1.1) ' -2
小数部の桁数を指定した切り捨て
「Truncate」と「Floor」は桁数の指定ができないため、自分で計算する必要があります。 次のサンプルは桁数を指定した切り捨てと、引数に桁数を指定できる切り捨て関数です。-
C#
少数第二位で切り捨てるときは10倍、少数第三位で切り捨てるときは100倍し、「Truncate/Floor」で切り捨てた後に掛けた値で割って元の桁に戻しています。掛ける倍率は10のべき乗で求められるため、「Math.Pow」を使用しています。
// 小数部の桁数を指定した切り捨て(Math.Truncate) double result21 = Math.Truncate(0.1234 * Math.Pow(10, 1)) / Math.Pow(10, 1); // 0.1 double result22 = Math.Truncate(0.1234 * Math.Pow(10, 2)) / Math.Pow(10, 2); // 0.12 double result23 = Math.Truncate(0.1234 * Math.Pow(10, 3)) / Math.Pow(10, 3); // 0.123 double result31 = Math.Truncate(-0.1234 * Math.Pow(10, 1)) / Math.Pow(10, 1); // -0.1 double result32 = Math.Truncate(-0.1234 * Math.Pow(10, 2)) / Math.Pow(10, 2); // -0.12 double result33 = Math.Truncate(-0.1234 * Math.Pow(10, 3)) / Math.Pow(10, 3); // -0.123 // 小数部の桁数を指定した切り捨て(Math.Floor) double result61 = Math.Floor(0.1234 * Math.Pow(10, 1)) / Math.Pow(10, 1); // 0.1 double result62 = Math.Floor(0.1234 * Math.Pow(10, 2)) / Math.Pow(10, 2); // 0.12 double result63 = Math.Floor(0.1234 * Math.Pow(10, 3)) / Math.Pow(10, 3); // 0.123 double result71 = Math.Floor(-0.1234 * Math.Pow(10, 1)) / Math.Pow(10, 1); // -0.2 double result72 = Math.Floor(-0.1234 * Math.Pow(10, 2)) / Math.Pow(10, 2); // -0.13 double result73 = Math.Floor(-0.1234 * Math.Pow(10, 3)) / Math.Pow(10, 3); // -0.124
関数化の例
/// <summary> /// 小数部の桁数を指定した切り捨て /// </summary> /// <param name="value">切り捨て対象の10進数</param> /// <param name="digits">戻り値の少数部の桁数</param> /// <returns>切り捨て結果</returns> double Truncate(double value, int digits) { double powValue = Math.Pow(10, digits); return Math.Truncate(value * powValue) / powValue; }
-
VB.NET
C#ではべき乗の計算に「Math.Pow」を使用していますが、VB.NETでは「^」演算子でも同様の結果が得られます(VB.NETでも「Math.Pow」を使えます)。
' 小数部の桁数を指定した切り捨て(Math.Truncate) Dim result21 As Double = Math.Truncate(0.1234 * (10 ^ 1)) / (10 ^ 1) ' 0.1 Dim result22 As Double = Math.Truncate(0.1234 * (10 ^ 2)) / (10 ^ 2) ' 0.12 Dim result23 As Double = Math.Truncate(0.1234 * (10 ^ 3)) / (10 ^ 3) ' 0.123 Dim result31 As Double = Math.Truncate(-0.1234 * (10 ^ 1)) / (10 ^ 1) ' -0.1 Dim result32 As Double = Math.Truncate(-0.1234 * (10 ^ 2)) / (10 ^ 2) ' -0.12 Dim result33 As Double = Math.Truncate(-0.1234 * (10 ^ 3)) / (10 ^ 3) ' -0.123 ' 小数部の桁数を指定した切り捨て(Math.Floor) Dim result61 As Double = Math.Floor(0.1234 * (10 ^ 1)) / (10 ^ 1) ' 0.1 Dim result62 As Double = Math.Floor(0.1234 * (10 ^ 2)) / (10 ^ 2) ' 0.12 Dim result63 As Double = Math.Floor(0.1234 * (10 ^ 3)) / (10 ^ 3) ' 0.123 Dim result71 As Double = Math.Floor(-0.1234 * (10 ^ 1)) / (10 ^ 1) ' -0.2 Dim result72 As Double = Math.Floor(-0.1234 * (10 ^ 2)) / (10 ^ 2) ' -0.13 Dim result73 As Double = Math.Floor(-0.1234 * (10 ^ 3)) / (10 ^ 3) ' -0.124
関数化の例
''' <summary> ''' 小数部の桁数を指定した切り捨て ''' </summary> ''' <param name="value">切り捨て対象の10進数</param> ''' <param name="digits">戻り値の少数部の桁数</param> ''' <returns>切り捨て結果</returns> Function Truncate(value As Double, digits As Integer) As Double Dim powValue As Double = (10 ^ digits) Return Math.Truncate(value * powValue) / powValue End Function
サンプルコードのダウンロード
サンプルコードの実行には Microsoft Visual Studio 2015 以上のバージョンが必要です。 2015以外のバージョンではプロジェクトを開いた際にファイルの変換が必要な場合があります。その場合は変換後に実行してください。検証環境
- Microsoft Visual Studio Professional 2015 Version 14.0.25431.01 Update 3
- Microsoft .NET Framework Version 4.6.01055
- Microsoft Windows 7 Professional Service Pack 1 (Microsoft Windows NT 6.1 (7601))