C#で絶対値を取得するには?絶対値の意味も解説!

- システム
エンジニア - C#での絶対値とは何ですか?
- プロジェクト
マネージャー - マイナスの数値を取り除く、プラスだけの数値のことを言います。
絶対値とは?
C#の絶対値の取得方法を知る前に、まず絶対値とは何なのかを確認しておきましょう。絶対値とは「0を起点とした時の値」のことで、簡単に言えば「正の数」です。5は0を起点として5であり、-5も0を起点として5ということです。
つまり、絶対値とはマイナスの数値・負の数を除くプラスのみの数値のことです。そしてC#において絶対値の取得とは「マイナスの数値だったらマイナスを取り、プラスにする」ということになります。
この記事では絶対値をC#で取得する方法と、注意すべき点、実例について解説します。C#を利用している方は是非ご覧ください。
C#の絶対値の計算方法
C#で絶対値を取得するにはどうしたらいいのでしょうか。以下のようなメソッドを作れば、絶対値を返してくれます。
static int GetABSVal(int val)
{
if (val >= 0)
return val;
else
return -val;
}
ABSValとはabsolute valueの略です。このメソッドに値を渡せば、マイナス値だった場合にマイナスをかけてプラスにして返すので、絶対値を取得できます。
Math.Absで絶対値を取得できる
しかし、上のようなコードを記述しなくても、C#では絶対値を取得できる標準メソッドがあります。それがMath.Absです。以下のようにすれば5が表示されます。
Console.WriteLine(Math.Abs(-5));
また、Math.Absはよく使われるint型以外の様々な型にも対応しています。以下のようにfloat型の-5.5fを渡せば、5.5が返されます。
Console.WriteLine(Math.Abs(-5.5f));
Math.Absは様々な型に対応できる
C#のMath.Absは、以下のサンプルのように多くの型に対応できます。
decimal abs_dc = Math.Abs(-1.2m);
Console.WriteLine(abs_dc+” Decimal型”);
double abs_db = Math.Abs(-3.4d);
Console.WriteLine(abs_db+” double型”);
short abs_sh = Math.Abs((short)-5);
Console.WriteLine(abs_sh+” short型”);
int abs_in = Math.Abs(-6);
Console.WriteLine(abs_in + ” int型”);
long abs_ln = Math.Abs(-7L);
Console.WriteLine(abs_ln+” long型”);
sbyte abs_sb = Math.Abs((sbyte)-8);
Console.WriteLine(abs_sb+” sbyte型”);
float abs_fl = Math.Abs(-9.1f);
Console.WriteLine(abs_fl+” float型”);
Math.Absは数値の型を気にせず使える
上のサンプルの実行結果は以下になります。
1.2 Decimal型
3.4 double型
5 short型
6 int型
7 long型
8 sbyte型
9.1 float型
なお、Math.Absのように同じメソッド名で複数の型のパラメータに対応できる作り方を、オーバーロードと言います。パラメータの型で判別して、内部で別の処理が呼び出されています。
C#のMathクラスはAbs以外にも、平方根を取得するSqrt、logを取得するLog、小数点を切り捨てるFloor、切り上げをするCeiling、サインを取得するSin、コサインを取得するCosなど様々な数学系メソッドを持つので興味があれば調べてみてください。
複素数の絶対値も計算できる
C#では複素数の絶対値も計算できます。複素数はComplexというクラスで設定し、Complex.Absで複素数の絶対値を取得できます。以下を実行すると、5と表示されます。
Complex complex = new Complex(3.0, 4.0);
Console.WriteLine(Complex.Abs(complex));
複素数とはa+biのような式で表され、aとbで示される二次元座標を表すことができます。iは虚数なので、乗算するとマイナスになる実在しない数です。Complex.Absで取得できる絶対値は、√aの2乗+bの2乗で、この値は複素数が示す座標のベクトル長を意味します。
上の例では|3+4i|=√3×3+4×4=√25=5という結果が返るので、5が表示されるのです。なおComplexクラスを使用する場合は、ソースの先頭にusing System.Numerics;を記述してください。
Math.Absの落とし穴
めったにないケースですが、Math.Absには危険な落とし穴があります。以下の2つの例を見てください。
short short_val = -32768;
Console.WriteLine(Math.Abs(short_val));
int int_val = -2147483648;
Console.WriteLine(Math.Abs(int_val));
上の結果は32768、下は2147483648になるように思えます。ところが、結果はどちらもOverflowExceptionが発生して異常終了してしまうのです。なぜでしょうか。
それはC#のshort型は-32768~32767、int形は-2147483648~2147483647までの範囲の値しか取れないからです。shortやintの最小値の値をプラスにしたくても、範囲外になるので出来ないということです。
これにひっかかる機会は少ないと思われますが、Math.Absを使用する時は頭の片隅に入れておくと良いでしょう。
Math.Absを使用した実例
C#の絶対値を取得するMath.Absは、具体的にどのような場合に役立つのでしょうか。以下は一つの例です。2つの座標の距離を表示します。
Random rand = new System.Random();
int x1 = rand.Next(0, 10);
Console.WriteLine(“Aの位置” + x1);
int x2 = rand.Next(0, 10);
Console.WriteLine(“Bの位置” + x2);
Console.WriteLine(“AからBを引いた値” + (x1 – x2));
Console.WriteLine(“AとBの距離は” + Math.Abs(x1 – x2));
Randomは乱数を取得するC#の機能です。このクラスのNextにより、指定した範囲の乱数を得ることができます。このサンプルでは0から9までの値を得られます。10まではないことに注意してください。
Math.Absでマイナス値を排除できる
上のサンプルは実行する度に結果が変わりますが、以下のようにAからBを引いた値がマイナスになることがあります。
Aの位置1
Bの位置5
AからBを引いた値-4
AとBの距離は4
AとBの差がマイナスでも、距離はプラスの値にしたいです。こういった場合に、絶対値を取得できるMath.Absが役立つのです。
Math.Absを使わず、結果がマイナス値だったらプラス値にするという処理を、if文で行っても問題はありません。しかし、Math.Absを使用することで、絶対値を取得しているということが明示されるため、意図が明確なプログラムになります。
- システム
エンジニア - Math.Absはさまざまな数値を計算することが出来るのですね。
- プロジェクト
マネージャー - さまざまな場面で絶対値を取得することが出来るので、身に付けておくといいでしょう。
C#のMath.Absで絶対値をスマートに処理しよう
C#の絶対値を取得するMath.Absについて紹介しましたが、いかがでしたでしょうか。プログラムをしていると、マイナスの値をプラス値として扱いたい機会がよくあるので、Math.Absを使うことは多くなるでしょう。
この記事を参考に、Math.Absを実際に使ってみてください。また、興味があればMath.Abs以外の数学系の機能も調べてみましょう。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


C#新着案件New Job
-
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅) -
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)