小数第N桁切り捨て
はじめに
ここでは、指定した小数N桁で切り捨てを行う方法を紹介します。
12.34532の小数第3桁の切り捨て → 12.34
例えば、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だけ累乗した値を返す。
Javaソースコード
TruncN.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 TruncN { // aの小数第ketaを切り捨てるメソッド private static double truncn( double a, int keta ) { long r; double p; p = Math.pow( 10.0, (double)( keta - 1 ) ); r = (long)( a * p ); return (double)r / p; } //メイン public static void main( String[] args ) { double a; // 切り捨てる値 a = 12.34532; // 切り捨ての結果を表示 System.out.println( a +"の小数第1桁の切り捨て: " + truncn( a, 1 ) ); System.out.println( a +"の小数第2桁の切り捨て: " + truncn( a, 2 ) ); System.out.println( a +"の小数第3桁の切り捨て: " + truncn( a, 3 ) ); System.out.println( a +"の小数第4桁の切り捨て: " + truncn( a, 4 ) ); } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis TruncN.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac TruncN.java
実行
C:\talavax\javasample>java TruncN
出力結果
12.34532の小数第1桁の切り捨て: 12.0 12.34532の小数第2桁の切り捨て: 12.3 12.34532の小数第3桁の切り捨て: 12.34 12.34532の小数第4桁の切り捨て: 12.345
結果、指定桁数で切捨てられていることが分かります。
001 002 003 004 005 006 007 008 009 010 011
public class TruncN { // aの小数第ketaを切り捨てるメソッド private static double truncn( double a, int keta ) { long r; double p; p = Math.pow( 10.0, (double)( keta - 1 ) ); r = (long)( a * p ); return (double)r / p; }
以上です。