C#のDecimal型を使った計算と型変換の方法
整数の演算であれば「int型」で事足りるかと思いますが、Decimal型では小数点以下の数値も扱うことができ、標準的な数値演算をサポートするメソッドも用意されています。
この記事では、Decimal型を使った計算や型変換について解説していきます。ぜひ参考にしてみてください。
- プログラマー
- 計算結果の小数点以下が画面に表示されません。一度ソースコードを見てもらえないでしょうか?
- プロジェクト
マネージャー - なるほど、計算結果を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」となります。
|
- プログラマー
- なるほど、こんな便利なデータ型があったのですね!
- プロジェクト
リーダー - そうですね。この機会に、Decimal型を使用してさまざまな計算を行ってみてください。
Decimal型を使って計算ができる
今回はDecimal型を使った計算や型変換を紹介しました。プログラムを組む上で、数値計算は必ずといって良いほど通る道だと思います。既に用意されているクラスやメソッドを活用して、効率良くコーディングを進めていきたいですね。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
新着案件New Job
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅) -
PMO/東京都豊島区/【WEB面談可】/在宅勤務
月給55万~55万円東京都豊島区(池袋駅)