Java での小数点以下 n 桁への丸め
Java では、小数点以下を指定した桁数に丸めるために、いくつかの方法があります。主に Math.round()
、DecimalFormat
、BigDecimal
クラスが使用されます。
方法 1: Math.round() を使った丸め
Math.round()
メソッドは、数値を最も近い整数に丸めます。小数点以下 n 桁に丸めるには、以下のようにします。
double number = 3.14159;
int n = 2; // 丸める桁数
double factor = Math.pow(10, n);
double roundedNumber = Math.round(number * factor) / factor;
System.out.println(roundedNumber); // 出力: 3.14
この方法では、まず指定した桁数分の10のべき乗を計算し、数値に掛けます。次に、Math.round()
で整数に丸め、最後に元の桁数に戻すために10のべき乗で割ります。
方法 2: DecimalFormat を使ったフォーマット
DecimalFormat
クラスは、数値をフォーマットする際に便利です。小数点以下 n 桁に丸めるには、以下のようにします。
import java.text.DecimalFormat;
double number = 3.14159;
int n = 2; // 丸める桁数
DecimalFormat df = new DecimalFormat("#." + "0".repeat(n));
String formattedNumber = df.format(number);
System.out.println(formattedNumber); // 出力: 3.14
この方法では、DecimalFormat
オブジェクトを作成し、"#." とそれに続く n 個の "0" をパターンとして使用します。このパターンは、小数点以下 n 桁を表示することを指定します。次に、format()
メソッドを使用して数値をフォーマットし、文字列として返します。
方法 3: BigDecimal を使った高精度計算
BigDecimal
クラスは、正確な小数点計算を行うために使用されます。小数点以下 n 桁に丸めるには、以下のようにします。
import java.math.BigDecimal;
import java.math.RoundingMode;
double number = 3.14159;
int n = 2; // 丸める桁数
BigDecimal bd = BigDecimal.valueOf(number);
bd = bd.setScale(n, RoundingMode.HALF_UP); // 丸めモードを指定
System.out.println(bd); // 出力: 3.14
この方法では、BigDecimal
オブジェクトを作成し、setScale()
メソッドを使用して指定した桁数に丸めます。RoundingMode
を使用して丸めモードを指定することができます。
注意点
Math.round()
は整数への丸めを行うため、小数点以下 n 桁への丸めには計算が必要になります。DecimalFormat
はフォーマットに特化しており、数値の計算には適していません。BigDecimal
は高精度計算に適していますが、パフォーマンスが若干低下する可能性があります。
Java での小数点丸めのコード解説
double number = 3.14159;
int n = 2; // 丸める桁数
double factor = Math.pow(10, n);
double roundedNumber = Math.round(number * factor) / factor;
System.out.println(roundedNumber); // 出力: 3.14
double number = 3.14159;
: 丸め対象の小数点をnumber
変数に代入します。int n = 2;
: 丸める桁数をn
変数に代入します。double factor = Math.pow(10, n);
:n
桁分の10のべき乗を計算し、factor
変数に代入します。double roundedNumber = Math.round(number * factor) / factor;
:number * factor
: 小数点をn
桁分シフトします。Math.round()
: シフトした値を最も近い整数に丸めます。/ factor
: 丸めた値を元の桁数に戻します。
System.out.println(roundedNumber);
: 丸めた結果を出力します。
import java.text.DecimalFormat;
double number = 3.14159;
int n = 2; // 丸める桁数
DecimalFormat df = new DecimalFormat("#." + "0".repeat(n));
String formattedNumber = df.format(number);
System.out.println(formattedNumber); // 出力: 3.14
import java.text.DecimalFormat;
:DecimalFormat
クラスをインポートします。DecimalFormat df = new DecimalFormat("#." + "0".repeat(n));
:DecimalFormat
オブジェクトを作成します。- パターン
"#." + "0".repeat(n)
は、小数点以下n
桁を表示するフォーマットを指定します。
String formattedNumber = df.format(number);
:number
を指定されたフォーマットで文字列に変換し、formattedNumber
に代入します。
import java.math.BigDecimal;
import java.math.RoundingMode;
double number = 3.14159;
int n = 2; // 丸める桁数
BigDecimal bd = BigDecimal.valueOf(number);
bd = bd.setScale(n, RoundingMode.HALF_UP); // 丸めモードを指定
System.out.println(bd); // 出力: 3.14
import java.math.BigDecimal;
:BigDecimal
クラスをインポートします。import java.math.RoundingMode;
:RoundingMode
クラスをインポートします。BigDecimal bd = BigDecimal.valueOf(number);
:double
型のnumber
をBigDecimal
オブジェクトに変換します。bd = bd.setScale(n, RoundingMode.HALF_UP);
:setScale(n, RoundingMode.HALF_UP)
メソッドで小数点以下n
桁に丸めます。RoundingMode.HALF_UP
は、0.5 以上の場合に切り上げ、それ以外の場合には切り捨てます。
System.out.println(bd);
: 丸めたBigDecimal
オブジェクトを出力します。
代替方法
String.format() を使ったフォーマット
double number = 3.14159;
int n = 2; // 丸める桁数
String formattedNumber = String.format("%.nf", number, n);
System.out.println(formattedNumber); // 出力: 3.14
%.nf
: フォーマット指定子で、n
は小数点以下の桁数を指定します。
printf による出力
System.out.printf()
メソッドは、標準出力にフォーマットされた文字列を出力します。小数点以下 n 桁に丸めるには、以下のようにします。
double number = 3.14159;
int n = 2; // 丸める桁数
System.out.printf("%.nf\n", number, n); // 出力: 3.14
String.format()
とprintf
は、数値を文字列に変換して出力するため、数値計算には適していません。
どの方法を選ぶべきか
- 単純な丸めと出力:
Math.round()
やString.format()
、printf
が適しています。 - 数値計算と高精度:
BigDecimal
が適しています。 - フォーマットと表示:
DecimalFormat
やString.format()
、printf
が適しています。
これらの方法を理解し、適切な方法を選択することで、Java での小数点丸めを効果的に行うことができます。
java decimal rounding