ゆるゆるプログラミング

・小数第N桁切り捨て

ここでは、指定した小数N桁で切り捨てを行う方法を紹介します。

Javaでは、double型およびfloat型の値をint型またはlong型型キャストすると小数点以下が切り捨てになる仕様になっています。

ここでは、切捨てする数値の桁数を一時的に変えて、long型型キャストし、その後に元の桁数に戻す方法を紹介します。

例えば、1234.567を小数第2位で切り捨てを行うことを考えます。この場合、1234.567を10倍して12345.67にした後に(long)12345.67で型キャストした整数値12345を求めます。その後に10で割れば1234.5が求められます。

同様に、1234.567を小数第3位で切り捨てを行うことを考えます。この場合、1234.567を100倍して123456.7にした後に(long)123456.7で型キャストした整数値123456を求めます。その後に100で割れば1234.56が求められます。

このように、切り捨てを行う桁数をNとするとき、元の値に10の( N - 1 )乗を値を掛けた値をlong型型キャストし、その値を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だけ累乗した値を返す。

以下は、小数点第N点での切り捨てを行うJavaソースコードの例です。

TruncN.java ← クリックしてダウンロードページに移動
001:    public class TruncN {
002:    	// aの小数第ketaを切り捨てるメソッド
003:    	private static double truncn( double a, int keta )
004:    	{
005:    		long r;
006:    		double p;
007:    
008:    		p = Math.pow( 10.0, (double)( keta - 1 ) );
009:    		r = (long)( a * p );
010:    		return (double)r / p;		
011:    	}
012:    
013:    
014:    	//メイン
015:    	public static void main( String[] args ) {
016:    		double a;
017:    
018:    		// 切り捨てる値
019:    		a = 12.34532;
020:    
021:    		// 切り捨ての結果を表示
022:    		System.out.println( a +"の小数第1桁の切り捨て: " + truncn( a, 1 ) );
023:    		System.out.println( a +"の小数第2桁の切り捨て: " + truncn( a, 2 ) );
024:    		System.out.println( a +"の小数第3桁の切り捨て: " + truncn( a, 3 ) );
025:    		System.out.println( a +"の小数第4桁の切り捨て: " + truncn( a, 4 ) );
026:    	}
027:    }

TruncN.javaの出力結果

12.34532の小数第1桁の切り捨て: 12.0
12.34532の小数第2桁の切り捨て: 12.3
12.34532の小数第3桁の切り捨て: 12.34
12.34532の小数第4桁の切り捨て: 12.345

結果、指定桁数で切捨てられていることが分かります。

001:    public class TruncN {
002:    	// aの小数第ketaを切り捨てるメソッド
003:    	private static double truncn( double a, int keta )
004:    	{
005:    		long r;
006:    		double p;
007:    
008:    		p = Math.pow( 10.0, (double)( keta - 1 ) );
009:    		r = (long)( a * p );
010:    		return (double)r / p;		
011:    	}

TruncNは、指定小数桁数で切り捨てするメソッドです。aに切り捨てる値、ketaに切り捨てる小数桁数を渡すと結果を返すメソッドです。

■関連コンテンツ

小数点以下四捨五入 Math.roundの使い方について解説

■新着情報

2020.05.07 サイコロの出目確率 サイコロの目のでる確率は?
2020.04.22 現在日時をミリ秒で取得 現在日時をミリ秒数で取得
2020.04.22 日時 日時の操作について
2020.04.22 時間の単位変換 1日、1時間は何ミリ秒?

■広告

法人向けのETC専用カード

~約8,000名の受講生と80社以上の導入実績~ 企業向けプログラミング研修ならCodeCamp

日本最大級ショッピングサイト!お買い物なら楽天市場

Topへ