10 年や 100 年,1000 年の秒数について先ほどは 1 年を 365 日として計算しましたが,閏年の効果を考えて 1 年を平均 365.24 日として計算した方がより正確な値が求まることが期待できます.つまり,小数を使いたいということになります.
Java では小数を書いたら,浮動小数点数と呼ばれる値だと考えます.詳しい説明は18.3.3 浮動小数点表現の精度・範囲と特別な値を見てもらうとして,浮動小数点数を利用することで,有効数字の桁数に制限があるかわりに,値自体は非常に大きな値から非常に 0 に近い値まで扱えます.そのため 1000 年の秒数を計算しても値が減ることはありません(それでも限りはあります).
小数の計算は整数と同じです.また,整数と小数を混ぜて計算すると整数が小数に変換されて計算されるので,10 年,100 年,1000 年の秒数は次のように計算できます.
// Program.java : 小数
class Program {
public static void main(String[] args) {
System.out.println(60 * 60 * 24 * 365.24 * 10);
System.out.println(60 * 60 * 24 * 365.24 * 100);
System.out.println(60 * 60 * 24 * 365.24 * 1000);
}
}
3.1556736E8
3.1556736E9
3.1556736E10
桁数が大きいため指数表示になっていますが,“3.1556736E9” は 3.1556736 の 10 の 9 乗倍つまり “31556736000” を表すので,今回はちゃんと計算できていそうですね.
このように整数と小数は同じように扱えますが,コンピュータの内部ではこの 2 つは全く違った形式で表わされています.言い換えると別々の形式なのに Java が自動的に整数を小数に変換するおかげで違いを気にする必要がありません.
ただし,31.5 変数の定義と参照のように整数か小数かどちらになっているかはきちんと把握しておいた方がよいです.
小数のまとめ
小数とその計算についてまとめます.ただし,ソースコードのうち “Program” と “main” の部分を省略しています.
- 小数点が付いた数値を書くと小数と見なされます.
System.out.println(3.7); System.out.println(-5.);
3.7 -5.0 - 数値の後に “e” と桁数を書くことで,指数を使った数を書くことができます.
System.out.println(2.6e5); System.out.println(-52e-4);
260000.0 -0.0052 - 小数の加減乗除はそれぞれ +, -, *, / を使います.
System.out.println(7. / 3.);
2.3333333333333335 - その他,括弧の使い方なども整数の場合と同じです.
- 整数と小数を混ぜて計算すると整数が小数に変換された上で計算されますが,整数どうしだと整数の計算になります.
System.out.println(5 / 2 * 2.0);
4.0