この記事の例では、Java での BigDecimal の操作方法を説明します。皆さんの参考に共有してください。具体的な分析は次のとおりです。
double と float は十分な精度ではないため、商用計算を実行する場合は BigDecimal を使用する必要があります。 BigDecimal オブジェクトは次のように作成されます。
次のようにコードをコピーします。 BigDecimal b = new BigDecimal("12.000001");
System.out.println(b);
出力結果は次のようになります。12.000001;
BigDecimal は作成時に String と double で渡すことができますが、String を使用するのが最適です。その理由については、次のコードを見てください。
次のようにコードをコピーします。 BigDecimal b = new BigDecimal("12.000001");
System.out.println(b);
BigDecimal c = 新しい BigDecimal(12.01);
System.out.println(c);
実行結果は次のとおりです。
12.000001
12.0099999999999997868371792719699442386627197265625
double が渡されると精度が失われることがわかります。
BigDecimal のその他の操作は次のとおりです。
コードをコピーします。コードは次のとおりです。 //追加
public static BigDecimal add(String num1, String num2) {
BigDecimal bd1 = 新しい BigDecimal(num1);
BigDecimal bd2 = 新しい BigDecimal(num2);
bd1.add(bd2) を返します。
}
//減算
public static BigDecimalsubtract(String num1, String num2) {
BigDecimal bd1 = 新しい BigDecimal(num1);
BigDecimal bd2 = 新しい BigDecimal(num2);
bd1.subtract(bd2) を返します。
}
//乗算
public static BigDecimal multiply(String num1, String num2) {
BigDecimal bd1 = 新しい BigDecimal(num1);
BigDecimal bd2 = 新しい BigDecimal(num2);
bd1.multiply(bd2) を返します。
}
//分割
public static BigDecimal dive(String num1, String num2, int i) {
BigDecimal bd1 = 新しい BigDecimal(num1);
BigDecimal bd2 = 新しい BigDecimal(num2);
// i は保持する桁数、BigDecimal.ROUND_HALF_UP は丸め規則を表します
return bd1.divide(bd2, i, BigDecimal.ROUND_HALF_DOWN);
}
3 番目のパラメータは四捨五入するかどうかです。
ROUND_HALF_DOWN は、5 が見つかったときに 1 が入力されないことを意味します。つまり、1.5->1 です。
ROUND_HALF_UP は、5 に遭遇すると 1 が入力される、つまり 1.5->2 を意味します。
ただし、注意すべき点がいくつかあります。
ROUND_HALF_DOWN を使用する場合は、次のようにコードをコピーします。 System.out.println(this.divide("67.75", "5",4));
System.out.println(this.divide("67.75", "5",1));
System.out.println("------");
System.out.println(this.divide("67.751", "5",4));
System.out.println(this.divide("67.751", "5",1));
実行結果は次のとおりです。
13.5500
13.5
-------
13.5502
13.6
論理的には 2 番目の結果は 13.5 になるはずです。なぜ13.6になったのでしょうか?多くのテストを行った結果、この丸めは精度の桁の後のシフトに基づいて 5 と比較されるのではなく、精度の桁の後のすべてのデータが 5 と比較されることがわかりました。つまり、13.5500 は次のように正確です。 1 桁の場合、0.0500 を使用して 5 と比較します。13.5502 は 1 桁まで正確なので、0.0502 を使用して 5 と比較します。これは 5 より大きいため、上向きに閉じます。
この記事が皆さんの Java プログラミングに役立つことを願っています。