小数第N桁四捨五入
はじめに
ここでは、指定した小数桁で四捨五入を行う方法を紹介します。
12.34532の小数第2桁を四捨五入 → 12.3
Javaには、小数第1桁を四捨五入するMath.roundメソッドが用意されています。
このメソッドは、小数第1桁で四捨五入して整数の値を求めるメソッドです。
四捨五入する小数桁数を指定することはできません。
Math.roundメソッド
public static int Math.round( float a ) public static int Math.round( double a )
・引数aで指定した数値に最も近い整数値を返します。 パラメータ a : 四捨五入したい数値 戻り値 aを四捨五入した整数値を返します。
例えば、1234.567を小数第2位で四捨五入を行うことを考えます。
この場合、1234.567を10倍して12345.67にした後にMath.round( 12345.67 )で四捨五入した整数値12346を求めます。
その後に10で割れば1234.6が求められます。
同様に、1234.567を小数第3位で四捨五入を行うことを考えます。
この場合、1234.567を100倍して123456.7にした後にMath.round( 123456.7 )で四捨五入した整数値123457を求めます。
その後に100で割れば1234.57が求められます。
このように、四捨五入を行う桁数をNとするとき、元の値に10の( N - 1 )乗を値を掛けた値をMath.roundに渡し、その値を10の( N - 1 )乗で割ることで指定桁数の四捨五入を求めることができます。
10の( N - 1 )乗は以下の累乗メソッドにより、簡単に計算することができます。
10の( N - 1 )乗は、Math.pow( 10.0, (double)( N - 1 ) )で計算できます。
Math.powメソッド
public static double Math.pow( double a, double b )
・aのb乗を返します。 パラメータ a : 基数の値。 b : 指数の値。 戻り値 aをbだけ累乗した値を返す。
Javaソースコード
RoundN.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027
public class RoundN { // aの小数第ketaを四捨五入するメソッド private static double roundn( double a, int keta ) { long r; double p; p = Math.pow( 10.0, (double)( keta - 1 ) ); r = Math.round( a * p ); return (double)r / p; } //メイン public static void main( String[] args ) { double a; // 四捨五入される値 a = 12.34562; // 四捨五入の結果を表示 System.out.println( a +"の小数第1桁を四捨五入: " + roundn( a, 1 ) ); System.out.println( a +"の小数第2桁を四捨五入: " + roundn( a, 2 ) ); System.out.println( a +"の小数第3桁を四捨五入: " + roundn( a, 3 ) ); System.out.println( a +"の小数第4桁を四捨五入: " + roundn( a, 4 ) ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis RoundN.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac RoundN.java
実行
C:\talavax\javasample>java RoundN
出力結果
12.34532の小数第1桁を四捨五入: 12.0 12.34532の小数第2桁を四捨五入: 12.3 12.34532の小数第3桁を四捨五入: 12.35 12.34532の小数第4桁を四捨五入: 12.346
結果、指定桁数での四捨五入に成功していることが分かります。
001 002 003 004 005 006 007 008 009 010 011
public class RoundN { // aの小数第ketaを四捨五入するメソッド private static double roundn( double a, int keta ) { long r; double p; p = Math.pow( 10.0, (double)( keta - 1 ) ); r = Math.round( a * p ); return (double)r / p; }
以上です。