BigDecimalの使い方


BigDecimal
なぜBigDecimalを使うのか
浮動小数点数はバイナリシステムで表されるため、バイナリは1/10を正確に表すことができず、10進数では1/3を正確に表すことができないようにする.したがって,多くの値浮動小数点数については,その表すことができる目標値に近い数で表されており,計算において気づきにくい誤差をもたらす可能性がある.基本データ型の浮動小数点数が正確に計算できないという問題を解決するために、Java.math.BigDecimalクラスは、浮動小数点数の正確な計算機能を提供しています.
BigDecimalの使い方
1.加減乗除
2.精度の設定
3.取反
加減乗除個別呼び出し関数
    public BigDecimal add(BigDecimal value);  
    public BigDecimal subtract(BigDecimal value);  
    public BigDecimal multiply(BigDecimal value);  
    public BigDecimal divide(BigDecimal value);  

例:
    BigDecimal a=new BigDecimal(10.0);  
    BigDecimal b=new BigDecimal(9.1);  
    System.out.println(a.subtract(b));  

精度設定、なぜ精度を設定するのか、効果を見せます
コードは次のとおりです.
    BigDecimal abig=new BigDecimal(10.0);  
    BigDecimal bbig=new BigDecimal(9.1);  
    BigDecimal cbig=new BigDecimal(8.9);
    System.out.println(abig.subtract(bbig));  
    System.out.println(abig.subtract(cbig));  

結果は次のとおりです.
    0.9000000000000003552713678800500929355621337890625  
    1.0999999999999996447286321199499070644378662109375  

0.9と1.1を望んでいるわけではありません.なぜなら、バイナリに移行すると精度に問題があり、このような結果になるからです.だから私たちは演算の時に精度を加えることができて、BigDecimalをインスタンス化する時文字列を使うことができます.
精度の設定方法:
    System.out.println(abig.subtract(bbig).setScale(2, BigDecimal.ROUND_HALF_UP));  
    System.out.println(abig.subtract(cbig).setScale(2, BigDecimal.ROUND_HALF_UP));  

これで2桁の精度を設定すればOKです
    0.90  
    1.10  
文字列のインスタンス化方法:
    BigDecimal abig=new BigDecimal("10.0");  
    BigDecimal bbig=new BigDecimal("9.1");  
    BigDecimal cbig=new BigDecimal("8.9");  

に逆らう
Bigdecimalは+-*/これらの記号で直接計算することはできないので、逆を取る場合も個別の方法が必要です.
System.out.println(abig.negate());  

反対の数を手に入れます
-10.0