
C#のDecimal型を使った計算と型変換の方法
整数の演算であれば「int型」で事足りるかと思いますが、Decimal型では小数点以下の数値も扱うことができ、標準的な数値演算をサポートするメソッドも用意されています。
この記事では、Decimal型を使った計算や型変換について解説していきます。ぜひ参考にしてみてください。
- PG
- 計算結果の小数点以下が画面に表示されません。一度ソースコードを見てもらえないでしょうか?
- PM
- なるほど、計算結果をint型で格納していますね。int型は整数しか扱えないので、小数点以下は切り捨てられます。このような場合には、Decimal型を使うのがおすすめです。
目次
Decimal型の概要
Decimal型は10進数の浮動小数点数を表しています。浮動小数点型には、他にもfloat型やdouble型が存在しますが、その中でもDecimal型は有効桁数の範囲が広く、丸め誤差のない財務計算にも適しています。
Decimal型での計算
それでは、実際にDecimal型を用いて、代表的な四則演算を行っていきましょう。
四則演算ごとにメソッドが用意されており、引数に2つの数値を与えて計算結果を返します。
【加算(Add)】
1 2 3 4 |
Decimal d1 = 100.05m; Decimal d2 = 10.2m; Console.WriteLine(Decimal.Add(d1, d2)); // → 出力結果は「110.25」となります。 |
【減算(Subtract)】
1 2 3 4 |
Decimal d1 = 100m; Decimal d2 = 0.5m; Console.WriteLine(Decimal.Subtract(d1, d2)); // → 出力結果は「99.5」となります。 |
【乗算(Multiply)】
1 2 3 4 |
Decimal d1 = 100m; Decimal d2 = 1.1m; Console.WriteLine(Decimal.Multiply(d1, d2)); // → 出力結果は「110.0」となります。 |
【除算(Divide)】
1 2 3 4 |
Decimal d1 = 1m; Decimal d2 = 2m; Console.WriteLine(Decimal.Divide(d1, d2)); // → 出力結果は「0.5」となります。 |
除算の場合、綺麗に割り切れない計算結果もでてきますね。その場合はどのように出力されるか、合わせて確認してみましょう。
1 2 3 4 |
Decimal d1 = 1m; Decimal d2 = 3m; Console.WriteLine(Decimal.Divide(d1, d2)); // → 出力結果は「0.3333333333333333333333333333」となります。 |
最大有効桁数まで循環小数で表されており、丸め誤差は発生していません。
しかし、実際にこのように出力されると見えにくいですよね。特定の桁数まで出力したい場合は、Roundメソッドを使用すると数値を四捨五入することもできます。例えば、計算結果を小数点以下2桁まで出力してみましょう。
1 2 |
Console.WriteLine(Decimal.Round(Decimal.Divide(d1, d2),2)); // → 出力結果は「0.33」となります。 |
Decimal型の変換
Decimal型から任意の整数型へ変換する場合、小数点以下は切り捨てられ、最も近い整数が返されます。
【Decimal → Int32】
1 2 3 4 |
Decimal d = 10.75m; int i = Decimal.ToInt32(d); Console.WriteLine(i); // → 出力結果は「10」となります。 |
任意の浮動小数点型へ変換する場合は、小数点以下も保持されて返されます。しかし、有効桁数の違いから、<例2>のように精度が落ちる可能性もあるため注意しましょう。
【Decimal → Double】
1 2 3 4 |
Decimal d1 = 10.75m; double db1 = Decimal.ToDouble(d1); Console.WriteLine(db1); // → 出力結果は「10.75」となります。 |
1 2 3 4 |
Decimal d2 = 0.3333333333333333333333333333m; double db2 = Decimal.ToDouble(d2); Console.WriteLine(db2); // → 出力結果は「0.333333333333333」となります。 |
- PG
- なるほど、こんな便利なデータ型があったのですね!
- PL
- そうですね。この機会に、Decimal型を使用してさまざまな計算を行ってみてください。
Decimal型を使って計算ができる
今回はDecimal型を使った計算や型変換を紹介しました。プログラムを組む上で、数値計算は必ずといって良いほど通る道だと思います。既に用意されているクラスやメソッドを活用して、効率良くコーディングを進めていきたいですね。