JavaのBigDecimalタイプ

1.定義フィールドに高精度が必要な場合は、通常、BigDecimalタイプが使用されます。
2.一般的に使用されるコンストラクター
BigDecimal(int)は、パラメーターで指定され
BigDecimal(double)整数値でオブジェクトを作成します。パラメーターで指定された倍精度値でオブジェクト
BigDecimal(long)を作成します。パラメーターで指定された長整数値でオブジェクト
BigDecimal(String)を作成します。文字列でパラメーターで指定された値でオブジェクトを作成します。オブジェクト
はBigDecimalオブジェクトを直接作成し、さまざまなタイプの対応する値を渡すことができます。ただし、float値とdouble値を渡すと、予測できない状況が発生します。

double aa = 0.1116666;
BigDecimal bb = new BigDecimal(aa);
System.out.println("bb的值为"+bb);

結果は次のとおりです。

bb的值为0.111666600000000004744293846670188941061496734619140625

原因分析:

1)パラメータタイプを使用doubleした構築方法の結果、多少予測できません。Javaで書くとまったく同じようnewBigDecimal(0.1116666)作成されたと思うかもしれませんが、実際には同じですこれは、正確に表現できないためです(この場合、有限長のバイナリ10進数として表現することはできません)。コンストラクターに渡される値は完全に等しくなるわけではありません(表面的にはこの値と等しくなりますが)。BigDecimal0.11166660.1116666000000000047442938466701889410614967346191406250.1116666double0.1116666

2)String構築方法は完全に予測可能です。書き込むnewBigDecimal(“0.1116666”)と、が作成BigDecimalされ0.1116666ます。これは、期待されるとまったく同じです。したがって、比較すると、一般的にはString最初に工法を使用することをお勧めします

3)Doubleタイプdがにdouble変わっBigDeciamalたら、最初の1Double.toString(double)つまたは複数のString.valueOf(double)メソッドdoubleStringタイプに変換してから、実際の値に相当する構築メソッドのタイプのBigDeciamalパラメーターを呼び出すことができStringます。
3.BigDecimal一般的なメソッドの詳細な説明
1)一般的なメソッド
add(BigDecimal)BigDecimalオブジェクトに値を追加してオブジェクトを返しBigDecimalます

subtract(BigDecimal)オブジェクトBigDecimalの値を減算し、BigDecimalオブジェクトを返します

multiply(BigDecimal)BigDecimalオブジェクトの値を乗算してオブジェクトを返しBigDecimalます

divide(BigDecimal)オブジェクトBigDecimalの値を除算して、BigDecimalオブジェクトを返します

toString()BigDecimalオブジェクトの値を文字列に変換します

doubleValue()BigDecimalオブジェクトの値を倍精度の数値に変換します

floatValue()BigDecimalオブジェクトの値を単一の精度の数値に変換します

longValue()BigDecimalオブジェクトの値を長整数に変換します

intValue()BigDecimalオブジェクトの値を整数に変換します
2)、BigDecimalサイズ比較
JavaはBigDecimal通常サイズを比較bigdemicalするcompareTo方法使用します

int a = bigdemical.compareTo(bigdemical2)

戻り結果の分析:

a = -1は、bigdemicalより小さいことを意味しbigdemical2ます;
a = 0は、bigdemical等しいことを意味しbigdemical2ます;
a = 1は、bigdemicalより大きいことを意味しますbigdemical2;
例:aはb以上であること

new bigdemica(a).compareTo(new bigdemical(b)) >= 0

4. BigDecima````格式化 由于NumberFormat 类的format()方法可以使用BigDecimal BigDecimal`` 对象作为其参数,可以利用`は、16桁を超える通貨値、パーセンテージ値、および一般値のフォーマット制御を実行します。

BigDecimal例として、通貨とパーセンテージのフォーマットを使用しますまず、算術演算BigDecimalを実行した後オブジェクトを作成BigDecimalし、それぞれ通貨とパーセンテージのフォーマットへの参照を確立し、最後にBigDecimalオブジェクトをformat()メソッドパラメータとして使用して、フォーマットされた通貨の値とパーセンテージを出力します。

    NumberFormat currency = NumberFormat.getCurrencyInstance(); //建立货币格式化引用 
    NumberFormat percent = NumberFormat.getPercentInstance();  //建立百分比格式化引用 
    percent.setMaximumFractionDigits(3); //百分比小数点最多3位 
    
    BigDecimal loanAmount = new BigDecimal("15000.48"); //贷款金额
    BigDecimal interestRate = new BigDecimal("0.008"); //利率   
    BigDecimal interest = loanAmount.multiply(interestRate); //相乘
 
    System.out.println("贷款金额:\t" + currency.format(loanAmount)); 
    System.out.println("利率:\t" + percent.format(interestRate)); 
    System.out.println("利息:\t" + currency.format(interest)); 

結果:

贷款金额: ¥15,000.48 利率: 0.8% 利息: ¥120.00

5.BigDecimalまとめ
1)正確な10進計算が必要な場合に使用しますBigDecimal巨大で複雑な計算を処理する場合BigDecimalパフォーマンス比doublefloat不十分さが特に明白です。したがって、一般的な精度の計算は必要ありませんBigDecimal
2)。パラメータタイプでStringコンストラクタを使用しみてください

おすすめ

転載: blog.csdn.net/weixin_43213064/article/details/109562365