Java には、指数関数や、絶対値、切り上げ、切り捨てなど、数値処理に関する基本的な操作がまとめられた Math クラスがあります。この記事では、Math クラスで用意されている数値処理のメソッドについて解説します。
絶対値の取得(abc メソッド)
Math.abc メソッドは、数値の絶対値を取得する関数です。
引数で指定した正の数または負の数から絶対値を返します。
Math.abs(int a)
引数:
a - 絶対値を取得する値
戻り値:
引数 a の絶対値
Math.abc メソッドの使用例は次のとおりです。
public class Main{
public static void main(String[] args){
System.out.println( Math.abs(1000) ); // 1000
System.out.println( Math.abs(-1000) ); // 1000
}
}
べき乗を求める(pow メソッド)
Math.pow メソッドは、「a の n 乗」のように、累乗を求めるときに使用するメソッドです。
引数の1つ目には、累乗する数値、2つ目の引数には指数を指定します。
Math.abs(double a, double b)
引数:
a - 数値
b - 指数
戻り値:
引数 aをb乗した値
以下サンプルコードは、10の3乗(103)を求めるサンプルコードです。
public class Main{
public static void main(String[] args){
System.out.println( Math.pow(10, 3) ); //1000
}
}
上のコードは、10 * 10 * 10 のようにして書くこともできますが、基本的には Math クラスのメソッドを使ったほうがよいでしょう。
小さい方、大きい方の値を取得(min, max メソッド)
Math.min メソッドは、引数で指定した2つの数値のうち、小さい方の値を返すメソッドです。
int、long、double、float のデータ型が渡せるように、同じ名前で4つメソッドが定義されています。
Math.min(int a, int b)
Math.min(long a, long b)
Math.min(double a, double b)
Math.min(float a, float b)
引数:
a - 比較する数値の1つ目
b - 引数する数値の2つ目
戻り値:
引数 a, bの内、小さい方の値
一方で、Math.max メソッドは、 min メソッドの逆で、引数で指定した2つの数値のうち、値が大きい方を返します。
Math.min と Math.max を使った例は次のとおりです。
public class Main{
public static void main(String[] args){
// minメソッド
System.out.println( "min=" + Math.min(3, 1) ); // min=1
// maxメソッド
System.out.println( "max=" + Math.max(3, 1) ); // max=3
}
}
引数に3つ以上渡すには?
Math.min および Math.max は、引数を2つまでしか指定できないため、3つ以上の値から最小値や最大値を取得する場合は、別の方法を考える必要があります。
1つ目に考えられるのが、min や max メソッドを複数回、呼び出す方法です。いったん 2の値を最小値・最大値を求め、その結果と別の数値で再度比較します。
public class Main{
public static void main(String[] args){
System.out.println( "min=" + Math.min(3, Math.min(1, 4)) ); // min=1
System.out.println( "max=" + Math.max(3, Math.max(1, 4)) ); // max=4
}
}
しかし、比較する値が 4つ、5つと増えていった時に、非常にコードが複雑になり、例えば次のような5つの値の最大値を求めるコードになると、ほとんどの人が一見しただけで読み解くのが難しくなるでしょう。
// 比較する値が5つの時の max メソッド
Math.max(2, Math.max(Math.max(3, 5), Math.max(1, 4)));
このことから、基本的には比較する値が 3つ以上になる場合は、Math.min 、Math.max は使用せず、Java8 導入された Stream API の max や min メソッドを使用する方がよいでしょう。
以下は、4つの数値が入ったリストから、Stream API を使って最小値と最大値を取得するサンプルコードです。
public class Main{
public static void main(String[] args){
List<Integer> values = Arrays.asList(2, 5, 10, 4);
//最大値(max)
Optional<Integer> max = values.stream().max(Comparator.naturalOrder());
System.out.println("最大値=" + max.get());
//最小値(min)
Optional<Integer> min = values.stream().min(Comparator.naturalOrder());
System.out.println("最小値=" + min.get());
}
}
切り上げ・切り捨て・四捨五入
Math クラスにある、ceil、floor、round メソッドを使用して、それぞれ切り上げ、切り捨て、四捨五入ができます。
切り上げ(ceil メソッド)
数値を切り上げる場合は、Math.ceil メソッドを使用します。このメソッドは、引数で指定した数値に対し、その数値以上で最小の整数を戻り値として返します。
Math.ceil(double a)
引数:
a - 数値
戻り値:
a以上で最小の整数(つまり切り上げた値)
切り捨て(floor メソッド)
数値を切り捨てる場合は、Math.floor メソッドを使用します。このメソッドは、引数で指定した数値以下で最大の整数を返します。
Math.floor(double a)
引数:
a - 数値
戻り値:
a以下で最大の整数(つまり切り上げた値)
四捨五入(round メソッド)
四捨五入をするには、Math.round メソッドを使用します。このメソッドは、引数の値に 0.5 を加算し、値を切り捨てた値を返します。
Math.round(double a)
Math.round(float a)
引数:
a - 数値
戻り値:
aを四捨五入した値
負の値でround メソッドを使用する時には注意が必要です。例えば負の値の -2.5 を指定すると、結果が -2 になります。これは round メソッドが内部的には floor(a + 0.5) と同じ動きをするためです。
まとめ
Java でよく使う絶対値の取得、べき乗、切り上げ、切り捨て、四捨五入などの数値処理を行う Math クラスの使い方について解説してきました。
他にも Math クラスには数値計算を行うメソッドがあるため、是非覚えておきましょう。
【関連記事】
▶Javaで値を2乗(べき乗)する方法をサンプル付きで解説!
Math クラスに用意されている数値処理のメソッドは、すべてクラスメソッド(静的メソッド)の static となるため、メソッドを使用するためにインスタンスの生成を行う必要なありません。