小数点以下第n位にdoubleを丸める
例えば電卓アプリなどで計算結果を表示する際、
割り切れない数値を、小数点以下第○位まで丸めて表示する方法です。
例として、10÷6の結果を、小数点以下第4位を四捨五入して、第三位まで表示してみます。
double value = 10d / 6d; BigDecimal bd = new BigDecimal(value);
パラメーターとしてvalueを与えてBigDecimalのインスタンスを作成します。
valueの値は、1.6666666666666667になっています。
bdの値は、1.6666666666666667406815349750104360282421112060546875となっています。
(↑ここらへんはどういう仕組みでそうなるのか分かりませんが、コンピューター的な現象なのでしょう笑)
小数点以下3位に四捨五入して丸めます。
BigDecimal bigDecimal = bd.setScale(3, BigDecimal.ROUND_HALF_UP);
String string = bigDecimal.toString();
新たにBigDecimal型の変数を用意して、先ほどのBigDecimalのsetScaleメソッドで目的の値を格納します。
setScale( 第何位まで , 端数処理の方法)
BigDecimalクラスのtoString()メソッドで、文字列を取得します。
文字列 "1.667" が取得できました。
日常的な電卓としては、とても見やすい表示になりました!
端数処理方法の定数は、他にもいろいろありますが、電卓で使うのは以下のあたりでしょうか。
ROUND_DOWN (切捨て)
ROUND_UP (切り上げ)
BigDecimalクラスを使うと、計算の精度は上がりますが、パフォーマンスは低下するそうです。