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

C#のMath.Sign()メソッドの使い方!オーバーロードと実装例をわかりやすく解説

C#のMath.Sign()メソッドは、指定した数値の符号を示す整数を返すメソッドです。戻り値は、数値が正なら「1」、負なら「-1」、ゼロなら「0」となります。

Math.Sign()のオーバーロード

Math.Sign()メソッドは、さまざまな数値型に対応できるよう、以下の7種類のオーバーロードが用意されています。

Math.Sign(Int16)
Math.Sign(Int32)
Math.Sign(Int64)
Math.Sign(SByte)
Math.Sign(Single)
Math.Sign(Decimal)
Math.Sign(Double)

使用例1:整数型でMath.Sign()を使う

まずは、short型・int型・long型の値に対してMath.Sign()メソッドを実装する例を見てみましょう。補助メソッドgetSign()を使うことで、戻り値をもとに符号の状態を文字列として表示しています。

using System;
public class Demo {
   public static void Main(){
      short val1 = 1;
      int val2 = 20;
      long val3 = -3545465777;
      Console.WriteLine("Short Value = " + val1);
      Console.WriteLine("Sign (Short Value) = " + getSign(Math.Sign(val1)));
      Console.WriteLine("Int32 value = " + val2);
      Console.WriteLine("Sign (Int32 Value) = " + getSign(Math.Sign(val2)));
      Console.WriteLine("Long value = " + val3);
      Console.WriteLine("Sign (Long Value) = " + getSign(Math.Sign(val3)));
   }
   public static String getSign(int compare){
      if (compare == 0)
         return "Equal to zero!";
      else if (compare < 0)
         return "Less than zero!";
      else
         return "Greater than zero!";
   }
}

出力結果

上記プログラムを実行すると、次のように出力されます。

Short Value = 1
Sign (Short Value) = Greater than zero!
Int32 value = 20
Sign (Int32 Value) = Greater than zero!
Long value = -3545465777
Sign (Long Value) = Less than zero!

使用例2:Decimal型・Double型でMath.Sign()を使う

続いて、Decimal型とDouble型の値に対してMath.Sign()メソッドを実装する例を見てみましょう。小数点を含む数値でも、同じように符号を判定できます。

using System;
public class Demo {
   public static void Main(){
      Decimal val1 = 20m;
      Double val2 = -35.252d;
      Console.WriteLine("Decimal Value = " + val1);
      Console.WriteLine("Sign (Decimal Value) = " + getSign(Math.Sign(val1)));
      Console.WriteLine("Double value = " + val2);
      Console.WriteLine("Sign (Double Value) = " + getSign(Math.Sign(val2)));
   }
   public static String getSign(int compare){
      if (compare == 0)
         return "Equal to zero!";
      else if (compare < 0)
         return "Less than zero!";
      else
         return "Greater than zero!";
   }
}

出力結果

上記プログラムを実行すると、次のように出力されます。

Decimal Value = 20
Sign (Decimal Value) = Greater than zero!
Double value = -35.252
Sign (Double Value) = Less than zero!

Math.Sign()使用時の注意点

  • NaNの扱い:Single型またはDouble型の引数がNaN(非数)の場合、ArgumentExceptionがスローされます。
  • Decimal.MinValueの扱い:Decimal型の引数がDecimal.MinValueと等しい場合、OverflowExceptionがスローされます。
  • 戻り値の型:どのオーバーロードを使用しても、戻り値は必ずint型になります。
  1. C#のMath.DivRem()メソッドの使い方を徹底解説!商と余りを同時に取得する方法

    C#のMath.DivRem()メソッドは、2つの数値の除算を行って商(quotient)を返すとともに、余り(remainder)をoutパラメータとして受け取ることができる便利なメソッドです。通常、商と余りの両方を求めるには「/」演算子と「%」演算子を別々に使う必要がありますが、このメソッドを使えば一度の呼び出しで両方の結果を取得できます。構文public static int DivRem(int dividend, int divisor, out int remainder); public static long DivRem(long dividend, long divisor

  2. C#のMath.DivRemメソッドとは?商と余りを同時に計算する方法

    C#のMath.DivRemメソッドは、2つの数値の商(割り算の結果)を計算すると同時に、余りも取得できる便利なメソッドです。通常、商を求める場合は「/」演算子、余りを求める場合は「%」演算子を使いますが、Math.DivRemを使えば1回の呼び出しで両方の結果を得ることができます。 Math.DivRemメソッドの基本構文 まず、被除数(割られる数)と除数(割る数)を設定します。 // 被除数(割られる数) long dividend = 30; // 除数(割る数) long divisor = 7; 続いて、DivRemメソッドを呼び出します。第3引数にはoutパラメータとして余りを受け