「Javaで四捨五入や切り捨て・切り上げをしたい」
今回はこのような悩みを解決していきます。
Javaで四捨五入や切り捨て・切り上げしたい場面は頻繁にあります。
JavaではMathクラスを使って四捨五入する方法とBigDecimalクラスを使う方法の2種類があります。
この記事では2種類のクラスを使って四捨五入する方法について解説します。
挫折せずにプログラミングを学ぶために必要なこと
僕はプログラミングで挫折した経験があります。
それは周りに聞ける人がいなく、一人でエラーと戦っていたからです。
Freeksは月額10,780円という破格の値段で、現役エンジニアに質問する環境を手に入れることができるプログラミングスクールです。
次のような悩みを少しでも抱えていたら、まずは無料カウンセリングを受けてみてください。
申込みは1分でできます。学習する環境にお金を使うというのは良い自己投資になります。
>>Freeksの無料カウンセリングはこちら
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メソッドは小数点第一位で四捨五入をします。
もし小数点第二位で四捨五入したい場合は次のような処理をすることで、実装することができます。
- 四捨五入したい値を10倍する
- Math.roundメソッドで四捨五入する
- 取得した値を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
今回は「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種類の方法があります。
挫折せずにプログラミングを学ぶためには?
僕はプログラミングで挫折した経験があります。
エラーの連続やエラーが解消しても思った通りに動かないといったことが原因で、プログラミングが嫌いでした。
「プログラミングって全然意味わからないし、全然楽しくない」そう思っていました。
原因は当時周りに聞ける人が誰もいなかったからです。
プログラミング学習をしていく上で周りに聞ける環境というのはとても大切です。
周りに聞ける人なんていない
そんな人におすすめなのが月額10,780円で現役エンジニアに質問できる、プログラミングスクールのFreeksです。
多くのプログラミングスクールが数十万円払って通うところを月額10,780円から通うことができるのはコスパが良いです。
しかもサブスク制で、自分のペースで学ぶことができ嫌になったらすぐにやめることができます。
「周りに誰も聞ける人がいなくて、エラーが解決できない」「プログラミング全然楽しくない」という方は、無料カウンセリングを受けてみて下さい。
【関連記事】Freeks評判、口コミ