BigDecimal類の簡単な使い方


回転:http://blog.csdn.net/justinavril/archive/2008/08/24/2823017.aspx
Javaの中のビジネス計算といえば、floatとdoubleは使えないと知っています.正確な計算ができないからです.しかし、Javaの設計者はプログラミング者に有用なBigDecimalを提供しました.彼はfloatとdouble類の正確な計算ができないのが残念です.Big Decimal類はjava.maths類の下にあります.まず、BigDecimalオブジェクトをどのように構築するかを見てみます.その構造関数はとても多いです.一番よく使われている二つを選んで実証してみます.一つはBigDecimalです. val)、もう一つはBig Decimalです.この二つはあまり区別がなさそうですが、APIの説明のように:
   1. new BigDecimal(.1) is exactly equal to .1, but it is actually equal
   2. to .1000000000000000055511151231257827021181583404541015625. This is so because .1
3. 4. cannot be represented exacThe results of this constructor can be somewhat unpredictable. One might assume that
      tly as a double (or, for that matter, as a binary fraction
   5. of any finite length). Thus, the long value that is being passed in to the constructor
   6. is not exactly equal to .1, appearances nonwithstanding.
   7. The (String) constructor, on the other hand, is perfectly predictable: new BigDecimal
   8. (".1") is exactly equal to .1, as one would expect. Therefore, it is generally
   9. recommended that the (String) constructor be used in preference to this one.
 
つまり、doubleをパラメータの構造関数として利用して、BigDecimalオブジェクトを正確に作成できません.コンテキストを指定する環境、つまり、正確なビットを指定する必要があります.Stringオブジェクトをパラメータとして導入した構造関数を用いて,BigDecimalオブジェクトを正確に構築した.下のコードを見てください.
   1. import java.math.*;
   2.

   3. public class TestBigDecimal {
   4.     public static void main(String args[]){
   5.         BigDecimal bd = new BigDecimal("10.123");
   6.         BigDecimal bd1 = new BigDecimal(10.123);
   7.         
   8.

   9.         System.out.println(bd +"
"+ bd1); 10. 11. } 12. }
 
  • 10.123
  • 10.121299999999999999999 33208983855811431884765625 ですから、私たちはコンストラクタを選ぶ時、具体的な需要によって決めます.
    また、基本的なタイプは、int、float、double、long、Big Decimalのオブジェクトとどうやって変換されますか?簡単です
    基本タイプはコンストラクタを介して対応するBig Decimalオブジェクトに変換され、Big Decimal類はintValue()、flooat Value()、doub leValue()、longValue()などの方法を提供してBigDecimalオブジェクトを対応する値に変換する.
    BigDecimalはどのように計算しますか?フォーラムの中の一人の質問の招待状を例にとって、BigDecimalの演算方法を簡単に書きます.李白さんは大丈夫です.町に行って、お酒を買いに行きます.店に会って倍をプラスして、花に会って1斗飲んで、5遇花と店、水瓶の中の酒を飲んで、李白壺の中原にどれだけの闘酒がありますか?
    この問題は後ろから前へ押すべきです.そして逆に計算して、最後に元のお酒の体積が出ます.
       1. import java.math.*;
       2.
    
       3. public class Libai {
       4.     public static void main(String args[]){
       5.         BigDecimal volumn = new BigDecimal("0");
       6.         
       7.         for (int i=0; i<5;  i++){           
       8.             volumn = volumn.add(new BigDecimal("1"));
       9.             volumn = volumn.divide(new BigDecimal("2"));
      10.         }
      11.         
      12.         System.out.print(volumn);
      13.     }
      14. }
     
  • 0.96875