Rounding | サンプルソース | |
---|---|---|
「小数点第2位で四捨五入」のように、数値を所定の桁数に丸め込む方法を紹介します。BigDecimalがどれくらいビックな野郎かがわかるハズ! |
Rounding.java |
/** * 愛のJava256本ノック for Java 5.0 * Javaサンプルソース ver0.2C "Rounding" * Rounding.java 「MathとBigDecimalによる小数点の四捨五入、切り捨て、切り上げ」 * * 2005/09/23 制作:安永ノリカズ * * 【コンパイル&実行方法】 * >javac Rounding.java * >java Rounding * 【キーワード】 * ceil(切り上げ), floor(切り下げ), round(四捨五入), 10進数(decimal), * 列挙型(enumerated type), * 【試してみよう】 * BigDecimalに用意されている8個の丸め込みモードをチェックする。 * printfメソッドやjava.text.NumberFormatクラスで、小数を整形して表示してみる。 */ import java.lang.Math; import java.lang.String; import java.lang.System; import java.math.BigDecimal; import java.math.RoundingMode; public class Rounding { public static void main(String[] A00) { System.out.println("小数を整数にする(Mathクラス)"); double L00 = 25.6; System.out.println("元の値 :" + L00); System.out.println("切り上げ:" + (int)Math.ceil(L00)); System.out.println("切り捨て:" + (int)Math.floor(L00)); System.out.println("四捨五入:" + Math.round(L00)); System.out.println("\n小数点第1位までにする(BigDecimalクラス)"); BigDecimal L01 = new BigDecimal("256.256"); System.out.println("元の値 :" + L01); System.out.println("切り上げ:" + L01.setScale(1, RoundingMode.CEILING)); System.out.println("切り捨て:" + L01.setScale(1, RoundingMode.FLOOR)); System.out.println("四捨五入:" + L01.setScale(1, RoundingMode.HALF_UP)); } } /* ■ クラスの外でちょっと一言 ■ 数値を扱うとき、必要な桁数に収まるよう、値を「丸め込み」たいときがありま すよね。そんなときによく使われるのが、切り上げ、切り捨て、四捨五入です。 基本型(intやdoubleなど)で処理を進める場合は、Mathクラスが便利。インスタ ンスを生成することなく、手軽に利用できます。ただし精度の問題上、小数を整 数に変換するときにしか使うべきではありません。 BigDecimalは、インスタンスの生成が伴うなど、多少面倒ですが、そのぶん細か く丸め込み処理を制御することができ、精度の問題もありません。場合によって 使い分けてください。 BigDecimalの丸めモードの指定には、以前は整数フィールド (BigDecimal.ROUND_HALF_UPなど)が使われていましたが、J2SE 5.0からは、 java.math.RoundingModeの列挙型の使用が推奨されています。 */