読者です 読者をやめる 読者になる 読者になる

kojiko-android’s blog

開発中にハマった時の解決策や、忘れがちなことを残しておきます。

小数点以下第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クラスを使うと、計算の精度は上がりますが、パフォーマンスは低下するそうです。