会计考友 发表于 2012-8-4 12:37:27

JAVA基础:如何应用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对象的数值转换成字符串。
  doubleValue()将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.doubleValue();
  System.out.println(dData); //结不美观:89.12345678901235

会计考友 发表于 2012-8-4 12:37:28

JAVA基础:如何应用Java的BigDecimal类

</p>  注重使用体例doubleValue()将对象bigNumber中的值以双精度数值返回时,将丢失踪数据的切确性。使用其他体例,如xxxValue()时均存在这个问题,使用时必需稳重。
  3W BigDecimal用来对跨越16有用位以上的数值进走运算和操作。所有的算术运算都经由过程挪用其响应的体例进行。建树一个跨越16有用位数的对象时,运用BigDecimal(String)才可避免丢失踪数字的切确度。
  5.9 BigDecimal和名目化
  因为NumberFormat类的format()体例可以使用BigDecimal对象作为其参数,可以操作BigDecimal对超出16位有用数字的货泉值,百分值,以及一般数值进行名目化节制。
  以操作BigDecimal对货泉和百分比名目化为例。首先,建树BigDecimal对象,进行BigDecimal的算术运算后,分袂成立对货泉和百分比名目化的引用,最后操作BigDecimal对象作为format()体例的参数,输出其名目化的货泉值和百分比,即:


//完整轨类型子在本书配套资本目录Ch5中名为BigDecimalFormatApp.java
  BigDecimal bigLoanAmount = new BigDecimal(loanAmountString);
  //建树BigDecimal对象
  BigDecimal bigInterestRate = new BigDecimal(interestRateString);
  BigDecimal bigInterest = bigLoanAmount.multiply(bigInterestRate);
  //BigDecimal运算
  NumberFormat currency = NumberFormat.getCurrencyInstance();
  //成立货泉名目化引用
  NumberFormat percent = NumberFormat.getPercentInstance();
  //成立百分比名目化引用
  percent.setMaximumFractionDigits(3); //百分比小数点最多3位
  //操作BigDecimal对象作为参数在format()中挪用货泉和百分比名目化
  System.out.println("Loan amount:t" + currency.format(bigLoanAmount));
  System.out.println("Interest rate:t" + percent.format(bigInterestRate));
  System.out.println("Interest:t" + currency.format(bigInterest));
  如下是这个轨范运行会的一个典型输出结不美观:
  Loan amount: ¥129,876,534,219,876,523.12
  Interest rate: 8.765%
  Interest: ¥11,384,239,549,149,661.69
页: [1]
查看完整版本: JAVA基础:如何应用Java的BigDecimal类