小数の計算を行うと、小数部が長くなってしまうことがありますね。
たとえば10.0 / 6.0なんか求めたら、1.6666666……と6が続いていきます。
そういった場合、出力したい小数部の桁数を決めることができれば、計算結果をより見やすくすることができます。
そういった場合はFomatterクラスやStringクラスに用意されているformatメソッドを使用すると可能になりますが、
実はキャストをうまく利用すると桁数を決めることができます。
ではまずサンプルです。
■DecimalDigitsSample_01.java
public class DecimalDigitsSample_01 { public static void main(String[] args) { double d = 10.0 / 6.0; System.out.println(d); } }
■実行結果
「1.6666666666666667」
不動小数の計算は誤差が出るので注意です。
これを小数第2位までの表示にしてみたいと思います。
■手順
- 100をかけて166.66666666666667にする。
- int型にキャストして小数部を切り捨ててしまう。
- 166を100で割って1.66にする。
これで小数第2位までの表記となります。
今回はメソッドとして作ってみます。
■DecimalDigitsSample_02.java
public class Sample { public static void main(String[] args) { double num = 10.0 / 6.0; System.out.println(formatDouble(num)); } static double formatDouble(double num) { double d1 = num * 100; // 手順1 int i = (int)d1; // 手順2 double d2 = i / 100.0; // 手順3 return d2; } }
■実行結果
「1.66」
無事小数第2位までの表記となりました!
ちなみに手順1~3を一行で書くと以下のようになります。
(int)(num * 100) / 100.0