JavaのMath.roundの使い方は?Math.roundのサンプル
- システム
エンジニア - JavaのMath.roundとはどのようなメソッドなのでしょうか。
- プロジェクト
マネージャー - 数学計算ができるJavaのクラス内でも小数点以下の四捨五入ができるメソッドです。
JavaのMath.roundとは?
JavaにはMathクラスという数学計算で便利に使えるメソッドを持つ標準クラスがあります。その中でも小数点以下の四捨五入ができるMath.roundは使う機会が比較的多いのではないでしょうか。
この記事ではMath.roundとそれ以外のMathクラスのメソッドについて紹介しますので、Javaの数学計算の方法を探している人は是非ご覧下さい。
Math.roundについての公式な説明
Math.roundメソッドについての公式な説明は以下のようになっています。パラメータにdouble型とlong型を指定できる2つがあります。
static long round(double a)
引数にもっとも近いlongを返します。同数の場合は正の無限大方向に丸めます。
static int round(float a)
引数にもっとも近いintを返します。同数の場合は正の無限大方向に丸めます。
要は小数点以下の四捨五入ができるということですが、四捨五入という言葉を使わずにそれを説明すると、このようになります。「丸める」というのは、ある少数があるとして、それに最も近い整数に直すことです。
Math.roundのサンプル
では実際にMath.roundを使ってみましょう。以下のJavaサンプルを実行してみてください。少数の末尾にfを付けるとfloat型、末尾にdを付けるとdouble型になります。
1
2
3
4
5
|
long result1 = Math.round(3.4d);
System.out.println("3.4を四捨五入すると"+result1);
int result2 = Math.round(3.5f);
System.out.println("3.5を四捨五入すると"+result2);
|
結果は以下になります。
3.4を四捨五入すると3
3.5を四捨五入すると4
結果のintとlongの型を変えたい場合は?
2つのMath.roundは、double→longとfloat→intの2つにしか対応していません。double→intやfloat→longにしたい場合はどうすれば良いのでしょうか。以下はlongとintを逆にしたサンプルです。
1
2
3
4
5
|
int result1 = (int)Math.round(3.4d);
System.out.println("3.4を四捨五入すると"+result1);
long result2 = Math.round(3.5f);
System.out.println("3.5を四捨五入すると"+result2);
|
long round(double a)をintにする時は注意すること
long型の結果をint型の変数に代入するには、(int)でキャストします。逆にint型からlongの場合はキャストは不要です。これはintは32ビット長であるのに対し、longは64ビット長さなのでサイズが溢れることが無いからです。
なお(int)でキャストしてもサイズ溢れは防げません。32ビット長のint型のサイズは-2,147,483,648~2,147,483,647までです。以下のJavaサンプルではそれを超えるサイズをint型にしています。
1
2
3
4
|
long result1 = Math.round(3000000000.4d);
System.out.println("3.4を四捨五入すると"+result1);
int result2 = (int)Math.round(3000000000.4d);
System.out.println("3.4を四捨五入すると"+result2);
|
結果は以下の通りで、int型の方は正しい値になりません。注意しましょう。
3.4を四捨五入すると3000000000
3.4を四捨五入すると-1294967296
Math.roundを使わずに四捨五入する
JavaでMath.roundを使わずに四捨五入するにはどうしたらよいのでしょうか。それは0.5を足してintやlongなどの整数型にキャストすれば可能です。以下のようにします。
1
2
3
4
5
6
|
float value = 4.6f;
int result = (int)(value + 0.5f);
System.out.println(value+"を四捨五入すると、"+result+"になります。");
|
結果は以下の通りです。
4.6を四捨五入すると、5になります。
切り上げ、切り捨てをするMathクラスのメソッド
JavaのMathクラスは四捨五入のroundだけでなく、切り上げや切り捨てをするメソッドもあります。以下がそのJavaサンプルです。
1
2
3
4
5
6
7
8
|
double result1 = Math.ceil(1.1d);
System.out.println("1.1を切り上げると"+result1+"になります。");
double result2 = Math.floor(1.9d);
System.out.println("1.9を切り捨てると"+result2+"になります。");
|
実行結果は以下になります。小数点以下の切り上げ・切り捨てが出来ています。
1.1を切り上げると2.0になります。
1.9を切り捨てると1.0になります。
絶対値を返すMathクラスのメソッド
JavaのMathクラスには絶対値を返すabsメソッドがあります。これは正の値の場合そのままの値を返し、負の値だった場合は正の値にして返します。以下のJavaサンプルではabsメソッドを使ったケースと、if文で処理したケースを併記しています。
1
2
3
4
5
6
7
8
9
10
|
int value = -3;
System.out.println(value + "の絶対値は" + Math.abs(value));
int tmp = value;
if (value < 0 ) {
tmp *= -1;
}
System.out.println(value + "の絶対値は" + tmp);
|
結果は以下になります。Math.absの方がif文で処理するより簡潔になります。
-3の絶対値は3
-3の絶対値は3
階乗を計算するMathクラスのメソッド
JavaのMathクラスには階乗の計算ができるメソッドのpowがあります。以下はMath.powを使ったケースと、それを使わずに自分で実装した場合との比較です。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
public static void main(String[] args) {
System.out.println("8の5乗は" + Math.pow(8, 5));
System.out.println("8の5乗は" + pow(8, 5));
}
public static int pow(int a, int b) {
int ret = a;
for (int i = 1; i < b; i++) {
ret *= a;
}
return ret;
}
|
結果は以下になります。Math.powを使えば自分で処理を実装するより簡単に済みます。
8の5乗は32768.0
8の5乗は32768
Mathクラスの三角関数のメソッド
JavaのMathクラスは三角関数の定数やメソッドがあります。以下がその使用例です。
1
2
3
4
5
|
System.out.println("円周率は" + Math.PI);
System.out.println("30度のサインは" + Math.sin(30));
System.out.println("60度のコサインは" + Math.cos(30));
System.out.println("90度のタンジェントは" + Math.tan(30));
|
実行結果は以下になります。三角関数は円を描画する時などに役立ちます。
円周率は3.141592653589793
30度のサインは-0.9880316240928618
60度のコサインは-0.9524129804151563
90度のタンジェントは-1.995200412208242
- システム
エンジニア - JavaのMath.roundだけでなく、その他のMathクラスの機能についても理解できました。
- プロジェクト
マネージャー - JavaのMath.roundを使用する方法と使用しない方法など、ご自身で使い分けてみてください。
JavaのMath.roundなどの機能を使いこなそう
JavaのMath.roundやその他のMathクラスの機能について解説しましたが、ご理解頂けましたでしょうか。Mathクラスはここで紹介した内容以外にも様々な機能があるので、是非チェックしてマスターしてしまいましょう。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
Java新着案件New Job
-
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅) -
販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅) -
生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅) -
社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅) -
金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅) -
大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)