BigDecimal
概要

Javaのjava.mathパッケージに含まれるBigDecimalクラスが代表的な実装であり、Pythonのdecimalモジュールなど他の言語にも似たような機能を持つ型が用意されている。整数部と小数部を合わせた数値と桁数の情報を組み合わせて値を保持しており、小数点以下の桁数を任意に指定できる。
数値を十進数のまま管理することで、極めて大きな数や長い桁数の小数でも精度を落とさずに計算することができる。加算や減算、乗算、除算に加え、比較や丸め、桁数の変更といった機能も備わっており、除算で無限小数になる場合は丸め方式や有効桁数を指定して計算する必要がある。通常の数値計算用の演算記号をそのまま使うことはできず、専用のメソッドを呼び出して計算する。
BigDecimalは主に金額の計算に用いられる。金融システムや会計ソフト、ECサイトの決済処理などでは、1円未満の端数のずれであってもシステム全体の信頼性を損なう原因になりかねない。浮動小数点数型で金額を扱うと、0.1と0.2を加算した結果が正確に0.3にならないといった問題が起こり得るが、BigDecimalを使えばこうした誤差を避けられる。税額計算や利率計算など、金額の正確性が求められる用途で広く採用されている。
一方、BigDecimalには計算処理の負荷が大きいという性質もある。内部で整数演算と桁数の管理を組み合わせて処理するため、float型やdouble型など浮動小数点数型に比べて演算速度が遅く、CPUやメモリの消費量も多くなる傾向がある。科学技術計算やグラフィックス処理など高速に大量の演算を行う必要があり、多少の誤差が許容される用途では、従来通り浮動小数点数型が使われることが一般的である。利用の際には、点にも注意が必要である。