JavaでのBigDecimalクラスの簡単な使い方

2808 ワード

この例では、JavaにおけるBigDecimalクラスの簡単な使い方を説明します.Javaプログラム設計において非常に実用的なテクニックです.具体的な使い方は以下の通りです.
一般的に、Javaのビジネスコンピューティングといえば、floatとdoubleは正確な計算ができないため、使用できないことを知っています.しかしJavaの設計者はプログラマに有用なクラスBigDecimalを提供し、floatとdoubleクラスが正確な計算ができない欠点を改善することができます.BigDecimalクラスはjava.mathsクラスパッケージの下にあります.まず、BigDecimalオブジェクトを構築する方法を見てみましょう.その構造関数は多く、ここで最もよく使われる2つを選んで実証します.1つはBigDecimal(double val)、もう1つはBigDecimal(String str)です.この2つはあまり違いがないように見えますが、APIの説明のように:

/*The results of this constructor can be somewhat unpredictable. One might assume that 
new BigDecimal(.1) is exactly equal to .1, but it is actually equal 
to .1000000000000000055511151231257827021181583404541015625. This is so because .1 
cannot be represented exactly as a double (or, for that matter, as a binary fraction 
of any finite length). Thus, the long value that is being passed in to the constructor 
is not exactly equal to .1, appearances nonwithstanding.
The (String) constructor, on the other hand, is perfectly predictable: new BigDecimal
(".1") is exactly equal to .1, as one would expect. Therefore, it is generally 
recommended that the (String) constructor be used in preference to this one.*/


つまりdoubleをパラメータとするコンストラクション関数ではBigDecimalオブジェクトを正確に構築することはできません.コンテキストの環境を自分で指定する必要があります.つまり、正確なビットを指定する必要があります.Stringオブジェクトをパラメータとして伝達する構造関数はBigDecimalオブジェクトを正確に構築することができる.次のコードを見てください.

import java.math.*;
public class TestBigDecimal {
  public static void main(String args[]){
    BigDecimal bd = new BigDecimal("10.123");
    BigDecimal bd1 = new BigDecimal(10.123);
    System.out.println(bd +"/n"+ bd1);
  }
}


実行後の出力:
10.123 10.1229999999999993320898283855058252811431884765625
したがって,コンストラクション関数を選択する際には,具体的なニーズに応じて決定する.
また、int、float、double、long、BigDecimalオブジェクトなどの基本タイプをどのように変換するかを聞く人が多い.簡単:
基本タイプはコンストラクション関数によって対応するBigDecimalオブジェクトに変換され、BigDecimalクラスはintValue()floatValue()doubleValue()longValue()メソッドなどのBigDecimalオブジェクトを対応する値に変換します.
BigDecimalがどのように計算されているかについて、フォーラムの一人の質問投稿を例に、BigDecimalの演算方法を簡単に書きます.テーマは:李白は無事に街を歩いて、ポットを持ってお酒を買いに行きます.店に会って倍になって、花を見て1斗飲んで、5回花と店に会って、壺の中の酒を飲んで、李白壺の中原に何斗の酒があるか聞いてみますか?
この問題は後ろから前へ押して、逆算して、最後に元の酒の体積を出すべきだ.

import java.math.*;
public class Libai {
  public static void main(String args[]){
    BigDecimal volumn = new BigDecimal("0");
    for (int i=0; i<5; i++){      
      volumn = volumn.add(new BigDecimal("1"));
      volumn = volumn.divide(new BigDecimal("2"));
    }
    System.out.print(volumn);
  }
}


実行結果:
0.96875
本稿では、Javaプログラミングの学習に役立つことを願っています.