JavaのBigDecimalクラスの適用方法


5.8 BigDecimalクラス
デュアル精度浮動小数点型変数doubleは16ビット有効数を処理できます.実際の応用では,より大きいまたはより小さい数の演算と処理が必要である.Javaがjava.mathパッケージで提供するAPIクラスBigDecimalは、16ビットを超える有効ビットの数を正確に演算するために使用されます.表5.7に、BigDecimalクラスの主要なコンストラクタとメソッドを示します.
表5.7 BigDecimalクラスの主なコンストラクタと方法
コンストラクタの説明
BigDecimal(int)は、パラメータで指定された整数値を持つオブジェクトを作成します.
BigDecimal(double)は、パラメータで指定された二重精度値を持つオブジェクトを作成します.
BigDecimal(long)は、パラメータで指定された長さの整数値を持つオブジェクトを作成します.
BigDecimal(String)は、パラメータで指定された文字列で表される数値を持つオブジェクトを作成します.
続表
メソッドの説明
add(BigDecimal)BigDecimalオブジェクトの値を加算し、そのオブジェクトを返します.
Subtract(BigDecimal)BigDecimalオブジェクトの値を減算し、このオブジェクトに戻ります.
Multiply(BigDecimal)BigDecimalオブジェクトの値を乗算し、このオブジェクトに戻ります.
divide(BigDecimal)BigDecimalオブジェクトの値を除いて、このオブジェクトに戻ります.
TOString()BigDecimalオブジェクトの数値を文字列に変換します.
doublue()BigDecimalオブジェクトの値を二重精度で返します.
floatValue()は、BigDecimalオブジェクトの値を単精度で返します.
longValue()は、BigDecimalオブジェクトの値を長い整数で返します.
intValue()BigDecimalオブジェクトの値を整数で返します.
なお、doubleなどの一般的な数値タイプでは、16ビットの有効数以上の数値を正確に表すことができないため、BigDecimalを使用する場合、BigDecimal(String)コンストラクタを適用してオブジェクトを作成することは意味がある.また、BigDecimalが作成したオブジェクトは、従来の+、-、*、/などの算術演算子を使用して直接オブジェクトを数学的に演算するのではなく、対応するメソッドを呼び出す必要があります.メソッドのパラメータもBigDecimalのオブジェクトでなければなりません.
コンストラクタは、オブジェクト、特にパラメータ付きオブジェクトを作成するために使用されるクラスの特殊な方法です.コンストラクタの概念と作成技術については,本書第6章で詳細に紹介する.
BigDecimalの一般的な例について説明します. // Ch5 BigDecimalTestApp.Java
  // BigDecimal
  BigDecimal bigNumber = new BigDecimal("89.1234567890123456789");
  BigDecimal bigRate = new BigDecimal(1000);
  BigDecimal bigResult = new BigDecimal(); // bigResult 0.0
  // bigNumber 1000,   bigResult
  bigResult = bigNumber.multiply(bigRate);
  System.out.println(bigResult.toString());
  // System.out.println(bigResult);
  // :89123.4567890123456789000
  // bigNumber
  double dData = bigNumber.doublue();
  System.out.println(dData); // :89.12345678901235

注意メソッドdoublue()を使用してオブジェクトbigNumberの値を二重精度の数値で返すと、データの正確性が失われます.その他の方法、例えばxxxValue()を使用する場合、この問題はすべて存在し、使用する場合は慎重にしなければならない.
  3 W BigDecimalは、16有効ビット以上の数値を演算および操作するために使用される.すべての算術演算は、対応するメソッドを呼び出すことによって行われます.有効桁数が16を超えるオブジェクトを作成する場合は、BigDecimal(String)を使用して数値の精度を失うことを回避します.
5.9 BigDecimalとフォーマット
NumberFormatクラスのformat()メソッドは、そのパラメータとしてBigDecimalオブジェクトを使用することができるため、BigDecimalを使用して16ビットを超える有効な数値の通貨値、パーセンテージ値、および一般的な数値をフォーマット制御することができます.
 
 
 
JAva四捨五入
2009-06-20 16:11
 
package Test;
import java.math.BigDecimal;//このパッケージを導入
public class Test { public static void main(String[] args) {
   double i = 3.856;
  //小数を切り捨てる   System.out.println(「小数点を切り捨てて整列:Math.floor(3.856)=」+(int)Math.floor(i);
  //四捨五入   System.out.println(「四捨五入整列:(3.856)=」     + new BigDecimal(i).setScale(0, BigDecimal.ROUND_HALF_UP));
  //四捨五入は2桁の小数を保留する   System.out.println(「四捨五入整列:(3.856)=」     + new BigDecimal(i).setScale(2, BigDecimal.ROUND_HALF_UP));
  //上限を取る   System.out.println(「コンパクト:Math.ceil(3.856)=」+(int)Math.ceil(i));
  //小数を切り捨てる   System.out.println(「小数点を切り捨てて整列:Math.floor(-3.856)=」+(int)Math.floor(-i);  //四捨五入   System.out.println(「四捨五入整列:(-3.856)=」     + new BigDecimal(-i).setScale(0, BigDecimal.ROUND_HALF_UP));
  //四捨五入は2桁の小数を保留する   System.out.println(「四捨五入整列:(-3.856)=」     + new BigDecimal(-i).setScale(2, BigDecimal.ROUND_HALF_UP));
  //上限を取る   System.out.println("コンパクト(-3.856)="+(int)Math.ceil(-i);