Javaで正確な数値計算を行うため BigDecimal を使っていたが、BigDecimalをdoubleで初期化したあと、小数点以下で四捨五入したところ誤差が出てしまった。
BigDecimalで誤差が出てしまった話 - たけぼーの備忘録
BigDecimal
を使用して正確な数値計算を行う場合、double
で初期化することは避けたほうが良いです。double
は浮動小数点数であり、多くの10進数は正確に表現できません。そのため、double
で初期化したBigDecimal
はすでに誤差を含んでいる可能性があります。
BigDecimal
を初期化する際には、String
型の値やBigInteger
型の値を利用してください。例えば:
この方法で初期化すると、BigDecimal
は正確な10進数値を保持します。
小数点以下で四捨五入を行う場合は、setScale
メソッドを使用し、RoundingMode
を指定します。
この例では、小数点以下2桁で四捨五入された結果が得られます。正確な数値計算を行うためには、BigDecimal
の初期化と四捨五入の両方で適切な方法を使用してください。