:: reverse dictionary ::
※ソースファイルについて
◎各マークの意味
Pb:pubic Pr:protected S:static
小数点第2位以下で四捨五入するには、BigDecimal クラスの setScale メソッドを使います。
import java.math.BigDecimal;
doubledbl = 0.4925; BigDecimal bd =newBigDecimal(String.valueOf(dbl));doublescale1 = bd.setScale(1, BigDecimal.ROUND_HALF_UP) .doubleValue();doublescale2 = bd.setScale(2, BigDecimal.ROUND_HALF_UP) .doubleValue();doublescale3 = bd.setScale(3, BigDecimal.ROUND_HALF_UP) .doubleValue();
scale1 は 0.5 、scale2 は 0.49 、scale3 は 0.493 になります。
java.math.BigDecimal Pb BigDecimal setScale(ints) Pb BigDecimal setScale(ints,intm)
スケール s で対象の BigDecimal の値を丸めます。 丸めモード m に切捨てや四捨五入の定数を指定することにより、丸め方を変更できます。
指定できる丸めモードは、次のとおりです。
| 丸めモード | 動作 |
|---|---|
| ROUND_CEILING | 正の無限大に近づくように丸める |
| ROUND_DOWN | 0 に近づくように丸める |
| ROUND_FLOOR | 負の無限大に近づくように丸める |
| ROUND_HALF_DOWN | 「もっとも近い数字」に丸める(五捨六入) |
| ROUND_HALF_EVEN |
「もっとも近い数字」に丸める (奇数: ROUND_HALF_UP、偶数:ROUND_HALF_DOWN)
|
| ROUND_HALF_UP | 「もっとも近い数字」に丸める(四捨五入) |
| ROUND_UNNECESSARY | 丸めなし |
| ROUND_UP | 0 から離れるように丸める |
六つの小数をスケール1で丸めた例を挙げておきます。
| 丸めモード | 0.04 | 0.05 | 0.06 | -0.04 | -0.05 | -0.06 |
|---|---|---|---|---|---|---|
| ROUND_CEILING | 0.1 | 0.1 | 0.1 | 0.0 | 0.0 | 0.0 |
| ROUND_DOWN | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |
| ROUND_FLOOR | 0.0 | 0.0 | 0.0 | -0.1 | -0.1 | -0.1 |
| ROUND_HALF_DOWN | 0.0 | 0.0 | 0.1 | 0.0 | 0.0 | -0.1 |
| ROUND_HALF_EVEN | 0.0 | 0.0 | 0.1 | 0.0 | 0.0 | -0.1 |
| ROUND_HALF_UP | 0.0 | 0.1 | 0.1 | 0.0 | -0.1 | -0.1 |
| ROUND_UP | 0.1 | 0.1 | 0.1 | -0.1 | -0.1 | -0.1 |
s … 返される BigDecimal の値のスケール(小数点の位)
m … 適用する丸めモード
スケール s と丸めモード m で丸めた BigDecimal
ArithmeticExceptionROUND_UNNECESSARY を指定して丸めが必要な場合IllegalArgumentExceptionBigDecimal クラスのコンストラクタに double 型の変数をそのまま指定してしまうと、違った値になる場合があります。
doubledbl = 0.6; BigDecimal bd =newBigDecimal(dbl); String strdbl = bd.toString();
strdbl は 0.59999999999999997779553950749686919152736663818359375 になります。
これは、double 型の変数(浮動小数点数)を IEEE 754 という規格で表しているからです。 IEEE 754 では、10進小数を2進数で表現するため、このような誤差が発生してしまいます。
double 型の変数は文字列に変換することで、この誤差をなくすことができます。 よって、double 型の変数を指定する場合は、文字列に変換してからコンストラクタに指定するようにします。
doubledbl = 0.6; BigDecimal bd =newBigDecimal(String.valueOf(dbl)); String strdbl = bd.toString();
strdbl は 0.6 になります。
Copyright (C) 2005-2007 Noto Watabe. All rights reserved.
e-mail:wmh@always-pg.com