</p> 注重使用体例doubleValue()将对象bigNumber中的值以双精度数值返回时,将丢失踪数据的切确性。使用其他体例,如xxxValue()时均存在这个问题,使用时必需稳重。
W, e3 H! [: d 3W BigDecimal用来对跨越16有用位以上的数值进走运算和操作。所有的算术运算都经由过程挪用其响应的体例进行。建树一个跨越16有用位数的对象时,运用BigDecimal(String)才可避免丢失踪数字的切确度。
2 o( A* ]7 \& H ]8 i 5.9 BigDecimal和名目化
/ L* `$ z: _# c9 @' R7 _ 因为NumberFormat类的format()体例可以使用BigDecimal对象作为其参数,可以操作BigDecimal对超出16位有用数字的货泉值,百分值,以及一般数值进行名目化节制。
9 S3 d/ z# Q+ f) j 以操作BigDecimal对货泉和百分比名目化为例。首先,建树BigDecimal对象,进行BigDecimal的算术运算后,分袂成立对货泉和百分比名目化的引用,最后操作BigDecimal对象作为format()体例的参数,输出其名目化的货泉值和百分比,即:4 V+ E; B" N: |8 O+ w
+ g- J9 x; n1 f' `6 T2 Q
2 b' O- I3 w* ?, u( x: j
//完整轨类型子在本书配套资本目录Ch5中名为BigDecimalFormatApp.java
0 p1 R/ C( N( V: m( X' j$ r. D. e BigDecimal bigLoanAmount = new BigDecimal(loanAmountString); . B$ X' }3 D* ]$ C, D. x" N
//建树BigDecimal对象 - M$ c' _; |. [
BigDecimal bigInterestRate = new BigDecimal(interestRateString);
b# _3 Z1 I" i4 k i% X; e! J9 a) Z BigDecimal bigInterest = bigLoanAmount.multiply(bigInterestRate);
0 h! H$ m0 l" ~1 l3 p# F9 Z //BigDecimal运算 , h* R6 a& T2 b0 q \
NumberFormat currency = NumberFormat.getCurrencyInstance();
- k( F% g# u n# G //成立货泉名目化引用 ! g3 a K! p; \. K' n
NumberFormat percent = NumberFormat.getPercentInstance();
* v5 j6 ?* u0 |3 t o* k0 n //成立百分比名目化引用 , F L1 p* D" S7 j5 T8 w# S3 ^ I: X
percent.setMaximumFractionDigits(3); //百分比小数点最多3位 0 w! O0 n& |; a
//操作BigDecimal对象作为参数在format()中挪用货泉和百分比名目化 2 @5 {6 U& g: y" K6 W& i
System.out.println("Loan amount:t" + currency.format(bigLoanAmount));
# f/ F1 R7 V4 j* [: n! ~ System.out.println("Interest rate:t" + percent.format(bigInterestRate)); / E4 A* R5 r& _. z9 Q* T4 F9 S* P
System.out.println("Interest:t" + currency.format(bigInterest));
" P) Y7 `+ x$ f) U/ Y4 H+ N 如下是这个轨范运行会的一个典型输出结不美观:1 Y+ w( U7 j+ N5 S& C7 ~# m: Q4 P# A
Loan amount: ¥129,876,534,219,876,523.12' X H# R C! _7 x
Interest rate: 8.765%' e9 G/ [$ C3 t% M' t
Interest: ¥11,384,239,549,149,661.69 |