検索

キーワード


【Java】基本的な数値処理!Mathクラスの使い方を解説!

  • 公開日:2020-07-31 15:26:21
  • 最終更新日:2021-01-25 17:43:21
【Java】基本的な数値処理!Mathクラスの使い方を解説!



こんにちは。

駆け出しプログラマーの松倉です!ここでは、数値(基本算術)について紹介・解説します。

プログラミング未経験の方、Javaについて勉強している方、これから勉強したいと思っている方の参考になれば幸いです!

関連記事リンク:【Java】ランダムな値を生成してみよう!Randomクラスの使い方! java.util.RandomJava】演算子(算術演算子と複合演算子)の使い方【Java】カンマ区切り?ゼロ埋め? 数値をフォーマット変換する方法!


 「Mathクラスの使い方(基本的な数値処理)」

javaには、基本的な数値処理を実行するためのメソッドをまとめた Mathクラスがあります。

このクラスは java.langパッケージにあるクラスであり、新たにインポートする必要はありません。

Mathクラスでは複数のメソッドが実装されています。


この記事では以下の主な関数の使い方について解説していきます!

・乱数

・絶対値

・最大最小取得

・四捨五入、切り上げ、切り捨て

・累乗 

・符号判定 

・補足(平方根、三角関数、対数など)




乱数

乱数とは人の意思や状況に依存せず、毎回何が出るかわからない数が出す値、つまりランダムな値のことです。

一般的にJavaで乱数を使用する場合、「Mathクラス(randomメソッド)」と「Randomクラス(java.util.Random)」があります。

今回この記事では Java.lang.Mathクラスの「randomメソッド」について解説します。


「randomメソッド」は、「 0.0 ~ 1.0未満」の範囲で double型の値を返します。

そのため、「 0 〜 9 」の範囲でランダムな数値を生成したい場合は、randomメソッドで取得した値を 10倍することで実現できます。

同じようにサイコロの目の場合は 6倍、トランプの数字の場合は 13倍しましょう。


randomメソッドの使い方

乱数 = Math.random();


実際に 0 ~ 10の乱数を生成するサンプルコードを確認してみましょう!

public class Random {
	public static void main(String[] args) {
		int rnd;
		rnd = (int) (Math.random() * 11);
		System.out.println(rnd);
	}
}


実行結果:

7

0 ~ 10の範囲で乱数の生成ができました。

実行するたびに違う値が出るか試して確認してみるのもおもしろいですよ! 




絶対値

絶対値とは、ある数字が原点からどれだけの距離にあるのかを示したものです。

そのため元の数が正の数であっても負の数であっても原点からの距離で定義されているため絶対値は 0以上の値で表されます。

例えば、「 3 」の絶対値は「 3 」、「 -7 」の絶対値は「 7 」となります。

 

絶対値を求める場合には、Java.lang.Mathクラスの「absメソッド」を使用します。

二つの値の差を正の値で取得、変数の値を正の値として取得できます。

※引数:int型、double型、float型、long型

 戻り値:それぞれの引数の型と同じ型


注意点として引数の値が最小値であった場合、absメソッドを使っても正の値になりません。

たとえば int型では最小値は「 -2147483648 」最大値が「 2147483647 」です。

最小値を「 -2147483648 」を正の値にすると収まりきらなくなるため、最小値の絶対値を absメソッドで求めた場合は、マイナスの値が戻されるようになることを覚えておきましょう。

 

absメソッドの使い方

絶対値 = Math.abs(指定する値);


実際にコードを確認してみましょう! 

public class Abs {
	public static void main(String[] args) {
		int absolute = Math.abs(-10);
		System.out.println("-10の絶対値は" + absolute + "です。");
	}
}


実行結果:

-10の絶対値は10です。

 


最大値最小値

引数値の大小を求める場合、Java.lang.Mathクラスの「maxメソッド」、「minメソッド」を使用します。

数値を比較してより大きい値を求める時には maxメソッド、より小さい値を求める時は minメソッドを使います。

※引数:int型、double型、float型、long

 戻り値:それぞれの引数の型と同じ型


maxメソッド、minメソッドの使い方

大きい値 = Math.max(比較する値, 比較する別の値);
小さい値 = Math.min(比較する値, 比較する別の値);


実際にコードを確認してみましょう! 

public class MaxMin {
	public static void main(String[] args) {
		double a = 5.27;
		double b = 4.93;
		System.out.println("最大値は" + Math.max(a, b));
		System.out.println("最小値は" + Math.min(a, b));
	}
}


実行結果:

最大値は5.27
最小値は4.93

数値を比較したときの最大値、最小値を求めることができました!



四捨五入、切り上げ、切り捨て

Mathクラスでは値の四捨五入、切り上げ、切り捨てを行うメソッドがあります。

四捨五入(roundメソッド)対象の数値との差が最も小さい整数値を求めます。

※引数:double型または float型

 戻り値:long型または int型

  例:「 19.5 」の小数点以下を四捨五入 ⇒「 20 」

    「 19.4 」の小数点以下を四捨五入 ⇒「 19 」


切り上げ(ceilメソッド)対象の数値以上の整数値の中で、最も小さい整数値を求めます。 

※引数:double型

戻り値:double型

  例:「 19.7 」の小数点以下を切り上げ ⇒「 20.0 」


切り捨て(floorメソッド)対象の数値以下の整数値の中で、最も大きい整数値を求めます。

※引数:double型

 戻り値:double型

  例:「 19.7 」の小数点以下を切り捨て ⇒「 19.0 」


roundメソッド、ceilメソッド、floorメソッドの使い方

切り上げた値 = Math.ceil(対象の数値);
切り下げた値 = Math.floor(対象の数値);
四捨五入した値 = Math.round(対象の数値);


切り捨て、切り上げ、四捨五入をそれぞれ使用したサンプルプログラムで確認します。

実際にコードを確認しましょう! 

public class Math {
	public static void main(String[] args) {
		double val = 19.7;
		System.out.println(val + "の切り捨ては、" + Math.floor(val) + "です。");
		System.out.println(val + "の切り上げは、" + Math.ceil(val) + "です。");
		System.out.println(val + "の四捨五入は、" + Math.round(val) + "です。");
	}
}


実行結果:

19.7の切り捨ては、19.0です。
19.7の切り上げは、20.0です。
19.7の四捨五入は、20です。 

変数 val が Mathメソッドにより値が変換されていることが確認できましたね!



累乗

累乗とは同じ数を繰り返しかけ算する計算です。

2を 5回かけ合わせた場合、2 × 2 × 2 × 2 × 2 で結果は 32 となり、これを「2 の 5乗」という累乗になります。

累乗は「a の n 乗」と表され a は底、n は指数と呼ばれます。  


累乗を求める場合には、Java.lang.Mathクラスの「powメソッド」を使用します。

数の大きな累乗計算をしたいときに使用されます。


powメソッドの使い方

累乗の値 = Math.pow(, 指数);


実際にコードを確認しましょう!       

public class Pow {
	public static void main(String[] args) {
		int a = 2;
		int n = 5;
		int result = 0;
		System.out.print(a + "の" + n + "乗は");
		result = (int) Math.pow(a, n);
		System.out.print(result + "です。");
	}
}


 実行結果:

25乗は32です。 

2 の 5乗の計算をさせることができましたね!

変数 a 、変数 n を変えることで様々な累乗計算をすることができます。



符号判定

 符号判定とは、ある数字が原点からどれだけの距離にあるのかを示したものです。

そのため元の数が正の数であっても負の数であっても原点からの距離で定義されているため絶対値は 0以上の値で表されます。 

 例えば、「 3 」の絶対値は「 3 」、「 -7 」の絶対値は「 7 」となります。  

 

値の符号を判定する場合には、Java.lang.Mathクラスの「signumメソッド」を使用します。

引数が正数であれば 1.0 を、引数が負数であれば -1.0 を、ゼロであれば 0.0 を、それぞれ返します。 


signumメソッドの使い方

符号判定 = Math.signum(対象の値);


 実際にコードを確認しましょう!   

public class Signum {
	public static void main(String[] args) {
		System.out.println(Math.signum(-3));
		System.out.println(Math.signum(0));
		System.out.println(Math.signum(15));
	}
}


 実行結果:

-1.0 
 0.0 
 1.0 

 指定された値の符号を判定することができましたね!    



補足

Mathクラスには、これまでに紹介したものの他にも様々な数学的な計算処理を行うメソッドが用意されています。

今回の記事では概要のみ紹介します。

・平方根 

    Math.sqrt()メソッドを使用します 。


・立方根      

  Math.cbrt()メソッドを使用します  


・三角関数(サイン、コサイン、タンジェント)    

  Math.sin() ,Math.cos() ,Math.tan() メソッドを使用します。

  

・角度とラジアン    

  Math.toRadians() メソッドを使用します。  


・対数     

  Math.log()メソッドを使用します。    



まとめ 

Mathメソッドは紹介したもののほかに複数実装されています。

この記事ではその中でも基本的なメソッドを解説しました。

これらのメソッドは覚えておくと計算ミスを減らしたり可読性が上がるなどコードを書く際に便利になります。

一度にすべては覚えられないと思いますが、実際に使用するときに調べて利用できると問題ないです。

こんなメソッドがあったなと覚えておくだけでも役に立つと思います。

基本的なことなので理解だけはしておきましょう!     

関連記事リンク:【Java】ランダムな値を生成してみよう!Randomクラスの使い方! java.util.RandomJava】演算子(算術演算子と複合演算子)の使い方【Java】カンマ区切り?ゼロ埋め? 数値をフォーマット変換する方法!


【著者】

松倉祥大

はじめまして。フォワードソフト株式会社の松倉です。
システムエンジニアとして働き始めたのが2020年4月です。経験や知識がない状態で入社した私は、フォワードソフトの教育研修で一からプログラミングの勉強をしました。教育研修を卒業後、Javaのプログラミングについて初学者向けの記事を共同で制作しています。
知識や経験はまだまだですが、これからいろんな職場で様々な経験しながら勉強していきたいと思っています。

よく読まれている記事
【Java】JSPでタグライブラリを使う(JSTL)

【Java】JSPでタグライブラリを使う(JSTL)

こんにちは。エンジニアの新田です!ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。今回は、JSPの標準タグライブラリ「JSTL」について紹介します。Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!関連記事リンク: 【Java】JSPの基本的な構文/【Java】JSPのアクションタグ

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

【Java】Stringクラス文字列を操作するメソッドの使い方まとめ!実例も紹介!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!そもそもStringとは何?『 String 』... Java言語において文字列のデータ型を指します。基本デ

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

【Java】文字列の置き換え(String#format)!エスケープシーケンスのまとめも!!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!Stringクラスformatメソッドの文字列整形【java.utilパッケージ】Formatterクラスfo

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

【Java】文字列格納後に変更可能!?StringBufferクラスとStringBuilderクラス!

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者にも✅、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!文字列を扱う3つのクラス【java.langパッケージ】java.langパッケージの文字列を扱うクラスにはS

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

【Java】値?変数?型??しっかり解説!『データ型(プリミティブ型と参照型)』

こんにちは。新人エンジニアのサトウです。システムエンジニアとして駆け出したばかりですが、初心者なりの視点でわかりやすい記事を心がけていますので参考になればうれしいです。プログラム初心者✅にも、プログラムに興味がある人✨も、短い時間で簡単にできますのでぜひこの記事を読んで試してみてください!プリミティブ型と参照型プログラム開発では型を持った変数を使ってデータのやり取りをしますが、データ型によって仕様