BigDecimalが乗算および除算演算を実行するときに注意が必要な事項

イルカエルフhttps : //mgo.whhtjl.com

1.乗算を行います(精度の問題)

Youke GOのビジネス要件:カードユーザーが支払いに成功すると、カード料金の30%が小数点以下2桁で直接プロモーターに報酬され、破棄された(切り捨てられた)小数の前の数値は決して増加しません。

package test;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Test {
	public static void main(String[] args) {
		String money="0.1";//卡费
		BigDecimal reallyPayMoney=new BigDecimal(money);
		System.out.println("结果:"+reallyPayMoney.multiply(new BigDecimal(0.3)).setScale(2, RoundingMode.DOWN));
	}
}

上記のコードを実行すると、次のような結果が表示されます。

ええと、0.1 * 0.3は0.03と等しくないのですか?どうすれば0.02になりますか?

その後、Decimalが乗算演算を行うときに0.3を浮動小数点に変換することが発見されましたが、精度が不十分なために値が変化し、理想的な値を計算できませんでした。

解決策は、初期化中にパラメータを文字列型に設定することです

コードを変更した後、再度実行すると、結果は次のようになります。

2.除算(無限ループ10進数が表示されます)

System.out.println(BigDecimal.ONE.divide(new BigDecimal("3")));

以下に示すように、エラーを実行します。

解決策は、操作中に精度を設定し、コードを変更して実行することです。結果は次のとおりです。

OK

 

おすすめ

転載: blog.csdn.net/qq_35393693/article/details/108528582