プロが教える店舗&オフィスのセキュリティ対策術

初心者です。よろしくお願いします。
Javaで有効数字の桁数を与えてそれ以下を四捨五入することはできますか。
できるなら方法を教えてください。

単に少数第○位を四捨五入するとあらかじめ決めておけばsetScaleメソッドでできると思うのですが、
例えば有効数字2桁と決めておいて、
34.1→34
3.41→3.4
0.341→0.34
といった具合に四捨五入する方法をお伺いしたいです。

よろしくお願いします。

A 回答 (3件)

以下にサンプルコードを示します。


説明は、とりあえず省略させていただきます。
疑問点があれば、お訊ねください。



/**
* 有効桁数指定による四捨五入のサンプルクラス
*/
public class EffectiveRoundSample {

/**
* 有効数字以下の数値を四捨五入します。
* @param value 数値
* @param effectiveDigit 有効数字桁数
* @return 四捨五入された数値
*/
public static double getEfficientRound( double value, int effectiveDigit ) {

int valueDigit = (int)Math.rint( Math.log10( Math.abs(value) ) );
int roundDigit = valueDigit - effectiveDigit + 1;
double v = Math.floor( value / Math.pow( 10, roundDigit ) + 0.5 );
return v * Math.pow( 10, roundDigit );

}

public static void main(String[] args) {

System.out.println( getEfficientRound( -1.2345e12, 3) );
System.out.println( getEfficientRound( 1234.5678, 3) );
System.out.println( getEfficientRound( 123.45678, 3) );
System.out.println( getEfficientRound( 12.345678, 3) );
System.out.println( getEfficientRound( 1.2345678, 3) );
System.out.println( getEfficientRound( 0.1234567, 3) );
System.out.println( getEfficientRound( 0.0123456, 3) );
System.out.println( getEfficientRound( 1.2345e-9, 3) );
System.out.println( getEfficientRound( -1.2345e-9, 3) );

}

}
    • good
    • 0
この回答へのお礼

ありがとうございます。
解決しました。

お礼日時:2008/07/19 22:15

科学表記法のように数値部分の位(小数点の位置)を統一したものでいったん表現すると、


四捨五入対象の位を固定にすることができ、丸めるのに便利になります。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2008/07/19 22:15

通常に四捨五入したあとで文字列に変換、


指定文字数分取り出した後、数値に変換する。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2008/07/19 22:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!