C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のDecimal構造体とは?Add・Ceiling・Compareメソッドの使い方を徹底解説


C#のDecimal構造体は、10進浮動小数点数を表す値型です。扱える数値の範囲は、正負ともに ±79,228,162,514,264,337,593,543,950,335(約7.9×1028)と非常に広く、金額計算のように高い精度が求められる処理に適しています。Decimal型の既定値は「0」です。

この記事では、Decimal構造体が提供する主要なメソッドのうち、「Add」「Ceiling」「Compare」の3つについて、構文と具体的なコード例を交えながら詳しく解説します。

Decimal.Add()メソッド ― 2つのDecimal値の加算

Decimal.Add()メソッドは、指定した2つのDecimal値を加算し、その結果を返す静的メソッドです。

構文

public static decimal Add (decimal val1, decimal val2);

val1 には加算対象となる最初のdecimal値、val2 には2番目のdecimal値を指定します。

コード例1

using System;
public class Demo {
    public static void Main(){
        Decimal val1 = 3.07m;
        Decimal val2 = 4.09m;
        Console.WriteLine("Decimal 1 = " + val1);
        Console.WriteLine("Decimal 2 = " + val2);
        Decimal res = Decimal.Add(val1, val2);
        Console.WriteLine("Result (Sum) = " + res);
    }
}

出力結果

Decimal 1 = 3.07
Decimal 2 = 4.09
Result (Sum) = 7.16

コード例2:MinValueとの加算

次に、Decimal.MinValue(表現できる最小値)を使った例を見てみましょう。

using System;
public class Demo {
    public static void Main(){
        Decimal val1 = Decimal.MinValue;
        Decimal val2 = 8.21m;
        Console.WriteLine("Decimal 1 = " + val1);
        Console.WriteLine("Decimal 2 = " + val2);
        Decimal res = Decimal.Add(val1, val2);
        Console.WriteLine("Result (Sum) = " + res);
    }
}

出力結果

Decimal 1 = -79228162514264337593543950335
Decimal 2 = 8.21
Result (Sum) = -79228162514264337593543950327

Decimal.Ceiling()メソッド ― 小数の切り上げ

Decimal.Ceiling()メソッドは、指定したdecimal数「以上」で最小の整数値を返します。いわゆる切り上げ処理に相当します。

構文

public static decimal Ceiling (decimal val);

val には切り上げ対象のdecimal数を指定します。

コード例1

using System;
public class Demo {
    public static void Main(){
        Decimal val1 = 12.85m;
        Decimal val2 = 3.45m;
        Console.WriteLine("Decimal 1 = " + val1);
        Console.WriteLine("Decimal 2 = " + val2);
        Console.WriteLine("Ceiling (val1) = " + Decimal.Ceiling(val1));
        Console.WriteLine("Ceiling (val2) = " + Decimal.Ceiling(val2));
    }
}

出力結果

Decimal 1 = 12.85
Decimal 2 = 3.45
Ceiling (val1) = 13
Ceiling (val2) = 4

コード例2:負の値の場合

負の値に対しても同様に機能します。「以上」という条件のため、-10.85は-10(0に近い側の整数)へと切り上げられる点に注意してください。

using System;
public class Demo {
    public static void Main(){
        Decimal val1 = -10.85m;
        Decimal val2 = -33.45m;
        Console.WriteLine("Decimal 1 = " + val1);
        Console.WriteLine("Decimal 2 = " + val2);
        Console.WriteLine("Ceiling (val1) = " + Decimal.Ceiling(val1));
        Console.WriteLine("Ceiling (val2) = " + Decimal.Ceiling(val2));
    }
}

出力結果

Decimal 1 = -10.85
Decimal 2 = -33.45
Ceiling (val1) = -10
Ceiling (val2) = -33

Decimal.Compare()メソッド ― 2つのDecimal値の比較

Decimal.Compare()メソッドは、指定した2つのDecimal値を比較し、その大小関係をint型の値として返します。

構文

public static int Compare (decimal val1, decimal val2);

戻り値の意味は次のとおりです。

  • 0より小さい値:val1 が val2 より小さい場合
  • 0:val1 と val2 が等しい場合
  • 0より大きい値:val1 が val2 より大きい場合

コード例1

using System;
public class Demo {
    public static void Main(){
        Decimal val1 = 45.85m;
        Decimal val2 = 35.45m;
        Console.WriteLine("Decimal 1 = " + val1);
        Console.WriteLine("Decimal 2 = " + val2);
        Console.WriteLine("Comparison Value = " + Decimal.Compare(val1, val2));
    }
}

出力結果

Decimal 1 = 45.85
Decimal 2 = 35.45
Comparison Value = 1

コード例2:等しい値の場合

using System;
public class Demo {
    public static void Main(){
        Decimal val1 = 65.15m;
        Decimal val2 = 65.15m;
        Console.WriteLine("Decimal 1 = " + val1);
        Console.WriteLine("Decimal 2 = " + val2);
        Console.WriteLine("Comparison Value = " + Decimal.Compare(val1, val2));
    }
}

出力結果

Decimal 1 = 65.15
Decimal 2 = 65.15
Comparison Value = 0

まとめ

Decimal構造体は、精度の高い10進数計算を実現するための重要な型です。Add()で加算、Ceiling()で切り上げ、Compare()で大小比較を行うことができ、いずれも静的メソッドとして提供されています。金額計算など誤差が許されない場面では、double型ではなくDecimal型を使用することをおすすめします。

  1. C#のUInt32構造体とは?CompareTo・Equalsメソッドの使い方を実例付きで解説

    UInt32構造体は、C#における32ビット符号なし整数(unsigned integer)を表す値型です。扱える値の範囲は 0 ~ 4,294,967,295 となっており、負の値を持たない整数データを効率的に処理したい場合に活用されます。 この記事では、UInt32構造体が提供する主要なメソッドである「CompareTo()」と「Equals()」について、構文やサンプルコード、実行結果を交えながら詳しく解説していきます。 UInt32.CompareTo()メソッドとは UInt32.CompareTo()メソッドは、現在のインスタンスを指定したオブジェクトまたはUInt32の値と比較

  2. C#のdecimal型(10進数型)とは?四則演算の基本をサンプルコードで解説

    C#におけるdecimal型(10進数型)は、値型(value type)に分類されるデータ型で、金額計算など高い精度が求められる場面でよく使われます。decimal型には、加算(+)、減算(-)、乗算(*)、除算(/)といった算術演算子が用意されており、通常の数値型と同じように演算を行うことができます。decimal型の変数を宣言するまず、2つのdecimal型の値を宣言してみましょう。decimal型のリテラルを代入する際は、数値の末尾に M または m サフィックスを付ける必要があります。decimal d1 = 5.8M; decimal d2 = 3.2M;decimal型同士の加算