• ベストアンサー

有効数字以下を四捨五入(Java)

初心者です。よろしくお願いします。 Javaで有効数字の桁数を与えてそれ以下を四捨五入することはできますか。 できるなら方法を教えてください。 単に少数第○位を四捨五入するとあらかじめ決めておけばsetScaleメソッドでできると思うのですが、 例えば有効数字2桁と決めておいて、 34.1→34 3.41→3.4 0.341→0.34 といった具合に四捨五入する方法をお伺いしたいです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • HarukaV49
  • ベストアンサー率53% (48/89)
回答No.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) ); } }

kogukogu2
質問者

お礼

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

その他の回答 (2)

回答No.2

科学表記法のように数値部分の位(小数点の位置)を統一したものでいったん表現すると、 四捨五入対象の位を固定にすることができ、丸めるのに便利になります。

kogukogu2
質問者

お礼

ありがとうございます。

回答No.1

通常に四捨五入したあとで文字列に変換、 指定文字数分取り出した後、数値に変換する。

kogukogu2
質問者

お礼

ありがとうございます。