- ベストアンサー
有効数字以下を四捨五入(Java)
初心者です。よろしくお願いします。 Javaで有効数字の桁数を与えてそれ以下を四捨五入することはできますか。 できるなら方法を教えてください。 単に少数第○位を四捨五入するとあらかじめ決めておけばsetScaleメソッドでできると思うのですが、 例えば有効数字2桁と決めておいて、 34.1→34 3.41→3.4 0.341→0.34 といった具合に四捨五入する方法をお伺いしたいです。 よろしくお願いします。
- みんなの回答 (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) ); } }
その他の回答 (2)
- ibe_tattsu
- ベストアンサー率70% (36/51)
科学表記法のように数値部分の位(小数点の位置)を統一したものでいったん表現すると、 四捨五入対象の位を固定にすることができ、丸めるのに便利になります。
お礼
ありがとうございます。
- shinya23so
- ベストアンサー率50% (80/159)
通常に四捨五入したあとで文字列に変換、 指定文字数分取り出した後、数値に変換する。
お礼
ありがとうございます。
お礼
ありがとうございます。 解決しました。