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

C#のDecimal.Subtract()メソッドとは?使い方とサンプルコードを解説

C#のDecimal.Subtract()メソッドは、指定した2つのDecimal(10進数)値同士の減算を行うための静的メソッドです。金額計算など、浮動小数点型では誤差が生じる可能性がある場面で、正確な10進数演算を行いたい場合に活用できます。

構文

Decimal.Subtract()メソッドの構文は以下の通りです。

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

パラメータの意味は次の通りです。

  • val1:被減数(引かれる側の数値)
  • val2:減数(引く側の数値)

戻り値として、val1からval2を引いた結果がdecimal型で返されます。

使用例1:基本的な減算

まず、Decimal.Subtract()メソッドを使った基本的な減算の例を見てみましょう。

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

実行結果

このプログラムを実行すると、以下の出力が得られます。

Decimal 1 = 3.45
Decimal 2 = 2.35
Result (Subtract) = 1.10

このように、3.45mから2.35mを引いた結果「1.10」が正確に計算されています。decimal型のリテラルには末尾に「m」を付ける点に注意してください。

使用例2:オーバーフローが発生するケース

次に、演算結果がdecimal型の範囲を超えた場合の動作を確認してみましょう。以下の例では、Decimal.MinValue(decimal型が表現できる最小値)からさらに値を引こうとしているため、実行時エラーが発生します。

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

実行結果

このプログラムを実行すると、以下のようにOverflowExceptionがスローされます。

Decimal 1 = 2.35
Decimal 2 = -79228162514264337593543950335
Run-time exception (line 13): Value was either too large or too small for a Decimal.
Stack Trace:
[System.OverflowException: Value was either too large or too small for a Decimal.]
   at System.Decimal.FCallAddSub(Decimal& d1, Decimal& d2, Byte bSign)
   at System.Decimal.Subtract(Decimal d1, Decimal d2)
   at Demo.Main() :line 13

エラーメッセージ「Value was either too large or too small for a Decimal.」は、演算結果がdecimal型で表現できる範囲(約±7.9×10^28)を超えていることを示しています。

まとめ

Decimal.Subtract()メソッドを使用する際のポイントは以下の通りです。

  • 2つのdecimal値の減算を正確に行える静的メソッドである
  • 第1引数が被減数、第2引数が減数となる
  • 演算結果がdecimal型の有効範囲を超えるとSystem.OverflowExceptionが発生するため、極端に大きな値や小さな値を扱う場合は注意が必要

金額計算など高い精度が求められる場面では、double型ではなくdecimal型とDecimal.Subtract()メソッドを組み合わせることで、誤差のない信頼性の高い演算を実現できます。

  1. C#のDecimal.ToSByte()メソッドとは?構文と使い方をわかりやすく解説

    C#のDecimal.ToSByte()メソッドは、指定されたDecimal(10進数)の値を、それと等価な8ビット符号付き整数(sbyte型)に変換するために使用される静的メソッドです。小数を含む値を整数として扱いたい場合などに活用できます。 構文 このメソッドの構文は以下の通りです。 public static sbyte ToSByte (decimal val); パラメータの「val」には、変換対象となるdecimal型の数値を指定します。戻り値としては、変換後のsbyte型(-128〜127の範囲)の値が返されます。 使用例1:基本的な使い方 まずは、Decimal.ToS

  2. C#のDecimal.ToOACurrency()メソッドとは?構文と使い方をサンプルコードで解説

    C#のDecimal.ToOACurrency()メソッドは、指定されたDecimal(10進数)の値を、64ビット符号付き整数に格納されるOLEオートメーション通貨(OLE Automation Currency)値へと変換するためのメソッドです。OLEオートメーション通貨は、小数点以下4桁を固定で持つ形式で表現され、元の値が10,000倍された整数として扱われます。そのため、変換結果はlong型(64ビット符号付き整数)として返されます。構文このメソッドの構文は以下の通りです。public static long ToOACurrency (decimal val);パラメータ「val」に