【Java】四捨五入/切り上げ/切り捨てする方法を徹底解説

Java

Javaで四捨五入や切り捨て・切り上げしたい場面は頻繁にあります。
JavaではMathクラスを使って四捨五入する方法とBigDecimalクラスを使う方法の2種類があります。

この記事では2種類のクラスを使って四捨五入する方法について解説します。

Mathクラスを使って四捨五入/切り上げ/切り捨て

まずはMathクラスを使って四捨五入、切り上げ・切り捨てする方法について解説していきます。

Math.roundメソッドで四捨五入

最初に四捨五入する方法です。
Mathクラスを使った四捨五入はroundメソッドを利用することで四捨五入できます。
roundメソッドは小数点第一位で四捨五入をします。

実際のコードで確認してみましょう。

public class RoundHalfUp {
	
	public static void main(String args[]) {
		
		// 四捨五入する値
		double num1 = 1.5;
		double num2 = 1.4;
		double num3 = -3.6;
		double num4 = -3.4;
		
		// Mathクラスを使って四捨五入した値を出力
		System.out.println(Math.round(num1));
		System.out.println(Math.round(num2));
		System.out.println(Math.round(num3));
		System.out.println(Math.round(num4));
	}
}

実行結果

2
1
-4
-3

小数点第二位で四捨五入する

Math.roundメソッドは小数点第一位で四捨五入をします。
もし小数点第二位で四捨五入したい場合は次のような処理をすることで、実装することができます。

  1. 四捨五入したい値を10倍する
  2. Math.roundメソッドで四捨五入する
  3. 取得した値をdoubule型にキャストして10で割る

サンプルで確認してみましょう。

public class RoundHalfUp {
	
	public static void main(String args[]) {
		
		// 四捨五入する値
		double before = 1.58;
		
		// 1 10倍する
		before = before * 10;
		
		// 2 Math.roundメソッドで四捨五入する
		long after = Math.round(before);
		
		// 3 取得した値をdouble型にキャストして10で割る
		System.out.println((double)after/10);
	}
}

実行結果

1.6

Math.ceilメソッドで切り上げ

次に切り捨てするceilメソッドについてサンプルで確認してみましょう。

public class RoundHalfUp {
	
	public static void main(String args[]) {
		
		// 切り上げする値
		double num1 = 1.5;
		double num2 = 1.4;
		double num3 = -3.6;	
		double num4 = -3.4;
		
		// Mathクラスを使って切り上げした値を出力
		System.out.println(Math.ceil(num1));
		System.out.println(Math.ceil(num2));
		System.out.println(Math.ceil(num3));
		System.out.println(Math.ceil(num4));
	}
}

実行結果

2.0
2.0
-3.0
-3.0

Math.floorメソッドで切り捨て

最後に切り捨てする方法についてサンプルを確認してみましょう。

public class RoundHalfUp {
	
	public static void main(String args[]) {
		
		// 切り捨てする値
		double num1 = 1.5;
		double num2 = 1.4;
		double num3 = -3.6;	
		double num4 = -3.4;
		
		// Mathクラスを使って切り捨てした値を出力
		System.out.println(Math.floor(num1));
		System.out.println(Math.floor(num2));
		System.out.println(Math.floor(num3));
		System.out.println(Math.floor(num4));
	}
}

実行結果

1.0
1.0
-4.0
-4.0

BigDecimalクラスを使って四捨五入/切り上げ/切り捨て

次にBigDecimalクラスを使って四捨五入や切り上げ・切り捨てする方法について解説します。
BigDecimalでは四捨五入もしくは切り上げ・切り捨てしたい値に対してsetScaleメソッドを呼び出すことで実現できます。

setScaleメソッドは引数を2つ取ります。
第一引数には小数点以下のどの位で四捨五入するか渡します。
第二引数に四捨五入するのか切り上げするのか切り捨てするのかを指定します。

それぞれの方法についてサンプルコードで確認してみます。

RoundingMode.HALF_UPで四捨五入

まずは四捨五入する方法についてサンプルを確認してみましょう。
第一引数で2を渡すと第三位で四捨五入されます。
setScaleメソッドの第二引数に「RoundingMode.HALF_UP」を渡すことで四捨五入となります。

import java.math.BigDecimal;
import java.math.RoundingMode;

public class RoundHalfUp {
	
	public static void main(String args[]) {
		
		// 四捨五入する値をBigDecimal型で宣言
		BigDecimal before = new BigDecimal(1.655482);
		
		// setScaleメソッドで四捨五入する
		BigDecimal after = before.setScale(2, RoundingMode.HALF_UP);
		
		System.out.println(after);
	}
}

実行結果

1.66

注意点:BigDecimal.ROUND_HALF_UPは非推奨

今回は「RoundingMode.HALF_UP」で四捨五入をする方法を紹介しました。
以前は「BigDecimal.ROUND_HALF_UP」が使われていましたが、こちらはJava9から非推奨になりました。
今後は「RoundingMode.HALF_UP」を使うようにしましょう。

この後紹介する切り上げや切り捨てに関しても、BigDecimalクラスではなくRoundingModeの値を使うようにしましょう。

RoundingMode.UPで切り上げ

続いて切り上げをする方法について紹介します。
切り上げをする場合は「RoundingMode.UP」をsetScaleメソッドの第二引数で指定することで実装できます。

import java.math.BigDecimal;
import java.math.RoundingMode;

public class RoundHalfUp {
	
	public static void main(String args[]) {
		
		// 四捨五入する値をBigDecimal型で宣言
		BigDecimal before = new BigDecimal(1.653482);
		
		// setScaleメソッドで切り上げする
		BigDecimal after = before.setScale(2, RoundingMode.UP);
		
		System.out.println(after);
	}
}

実行結果

1.66

RoundingMode.DOWNで切り捨て

切り捨てする場合はRoundingMode.DOWNを渡すことで切り捨てすることができます。

import java.math.BigDecimal;
import java.math.RoundingMode;

public class RoundHalfUp {
	
	public static void main(String args[]) {
		
		// 切り捨てBigDecimal型で宣言
		BigDecimal before = new BigDecimal(1.653482);
		
		// setScaleメソッドで切り捨てする
		BigDecimal after = before.setScale(2, RoundingMode.DOWN);
		
		System.out.println(after);
	}
}

実行結果

1.65

今回はJavaで四捨五入や切り上げ・切り捨てする方法について解説しました。
JavaではMathクラスのメソッドを使って四捨五入や切り上げ切り捨てをする方法とBigDecimalクラスのオブジェクトに対してsetScaleメソッドを使うことで実装する方法の2種類の方法があります。

最後まで読んでいただきありがとうございます。

このブログでは初心者の方向けにサーブレットとjspでwebアプリを開発する方法をサンプルコード付きで解説しています。ぜひチャレンジしてみてください。

タイトルとURLをコピーしました