Javaにおける精度喪失問題の原因と解決方法

779 ワード

Java開発の過程で、必要な演算に遭遇することがありますが、一部のプロジェクト、特に金融関連のプロジェクトはこれらの演算の精度に高い要求があります.では、なぜ精度が失われたのか、私たちはどのようにこの問題を解決すればいいのでしょうか.
問題の原因:まずコンピュータはバイナリ演算を行い、私たちが入力した10進数はまずバイナリに変換され、演算を行ってから10進数出力に変換されます.FloatとDoubleは高速な演算を提供していますが、問題はバイナリに変換すると、完全に変換できず、元の値に無限に近づくしかなく、その後の演算で不正な結果が発生する場合があります.
解決策:JavaはBigDecimalメソッドを提供しています.具体的には、次のように使用します(入力値と設定値のタイプがDoubleであると仮定します).
import java.math.BigDecimal;

public class Test{
	public Test(){	
	}
	public static double multiply(double v1,double v2){
		BigDecimal b1 = new BigDecimal(Double.toString(v1));
		BigDecimal b2 = new BigDecimal(Double.toString(v2));
		BigDecimal b3 = b1.multiply(b2);//        (  :        BigDecimal        )
		Double b4 = b3.doubleValue();
		return b4;//        ,set、     (       )
	}
}