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()メソッドを組み合わせることで、誤差のない信頼性の高い演算を実現できます。
-
C#のDecimal.ToSByte()メソッドとは?構文と使い方をわかりやすく解説
C#のDecimal.ToSByte()メソッドは、指定されたDecimal(10進数)の値を、それと等価な8ビット符号付き整数(sbyte型)に変換するために使用される静的メソッドです。小数を含む値を整数として扱いたい場合などに活用できます。 構文 このメソッドの構文は以下の通りです。 public static sbyte ToSByte (decimal val); パラメータの「val」には、変換対象となるdecimal型の数値を指定します。戻り値としては、変換後のsbyte型(-128〜127の範囲)の値が返されます。 使用例1:基本的な使い方 まずは、Decimal.ToS
-
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」に