background image

5         System.out.printf("bd1 = %s after add.\n",bd1.toPlainString());
6         bd1 = bd1.multiply(bd2);
7         System.out.printf("bd1 = %s after multiply.\n",bd1.toPlainString());
8         bd1 = bd1.subtract(bd2);
9         System.out.printf("bd1 = %s after subtract.\n",bd1.toPlainString());
10         bd1 = bd1.divide(bd2, BigDecimal.ROUND_UP);
11         System.out.printf("bd1 = %s after divide.\n",bd1.toPlainString());
12         bd1 = bd1.negate();
13         System.out.printf("bd1 = %s after negate.\n",bd1.toPlainString());
14                   System.out.println("The   power   of   db2(123)   is   "   + 
bd2.pow(2).toPlainString());
15     }
16     /*    输出结果如下:
17         bd1 = 123456912.0123456890 after add.
18         bd1 = 15185200177.5185197470 after multiply.
19         bd1 = 15185200054.5185197470 after subtract.
20         bd1 = 123456911.0123456890 after divide.
21         bd1 = -123456911.0123456890 after negate.
22         The power of db2(123) is 15129
23     */
   从结果中可以看出没有丢失精度。

 

  ③ 基于刻度的进位:
 1     public static void main(String args[]) {
 2         int decimalPlaces = 2;
 3         BigDecimal bd = new BigDecimal("123456789.0123456890");
 4         //始终向下舍位
  5                   BigDecimal   bd1   =   bd.setScale(decimalPlaces, 
BigDecimal.ROUND_DOWN);
 6         System.out.println(bd1.toString());
 7         //始终向上进位
 8         BigDecimal bd2 = bd.setScale(decimalPlaces, BigDecimal.ROUND_UP);
 9         System.out.println(bd2.toString());
10         BigDecimal bd3 = new BigDecimal(3.14159);
11         //四舍五入
12         bd3 = bd3.setScale(3, BigDecimal.ROUND_HALF_UP);
13         System.out.println(bd3.toString());
14     }
15     /*    输出结果如下:
16         123456789.01
17         123456789.02
18         3.142
19     */

 大整型对象(BigInteger)