1 package com.jdk7.chapter3;
2
3 import java.math.BigDecimal;
4
5 public class HandleBigDecimal {
6 public static double add(double a1, double a2){
7 //声明BigDecimal对象进行数学计算时,参数使用String会比较准确
8 BigDecimal a = new BigDecimal(Double.valueOf(a1).toString());
9 BigDecimal b = new BigDecimal(Double.valueOf(a2).toString());
10 System.out.println(a+"+"+b+" = "+a.add(b));
11 return a.add(b).doubleValue();
12 }
13
14 public static double sub(double s1,double s2){
15 BigDecimal a = new BigDecimal(Double.valueOf(s1).toString());
16 BigDecimal b = new BigDecimal(Double.valueOf(s2).toString());
17 System.out.println(a+"-"+b+" = "+a.subtract(b));
18 return a.subtract(b).doubleValue();
19 }
20
21 public static double multiply(double m1, double m2){
22 BigDecimal a = new BigDecimal(Double.valueOf(m1).toString());
23 BigDecimal b = new BigDecimal(Double.valueOf(m2).toString());
24 System.out.println(a+"*"+b+" = "+a.multiply(b));
25 return a.multiply(b).doubleValue();
26 }
27
28 public static double div(double d1, double d2){
29 return div(d1, d2, 4);
30 }
31
32 public static double div(double v1, double v2, int scale){
33 if(scale<0){
34 System.err.println("精度不能小于0");
35 return 0;
36 }else{
37 BigDecimal a = new BigDecimal(Double.valueOf(v1).toString());
38 BigDecimal b = new BigDecimal(Double.valueOf(v2).toString());
39 System.out.println(a+"/"+b+" = "+a.divide(b, scale));
40 return a.divide(b, scale).doubleValue();
41 }
42 }
43
44 /**
45 * 计算整数阶乘,当整数超过17时,阶乘超出long的范围,此时阶乘结果要用BigDecimal类型保存
46 * @return
47 */
48 public static BigDecimal getFactorial(int n){
49 if(n<0){
50 System.out.println((new BigDecimal("-1")).toString());
51 return new BigDecimal("-1");
52 }else if(n==0){
53 System.out.println((new BigDecimal("0")).toString());
54 return new BigDecimal("0");
55 }else{
56 BigDecimal result = new BigDecimal("1");
57 for(;n>0;n--){
58 result = result.multiply(new BigDecimal(Integer.valueOf(n).toString()));
59 }
60 System.out.println(result.toString());
61 return result;
62 }
63 }
64 public static void main(String[] args) {
65 add(0.01,0.05);
66 sub(1.0,0.42);
67 multiply(4.015,100);
68 div(123.3,100);
69 div(123.3,100,4);
70 // div(123.3,100,-1);
71 getFactorial(-1);
72 getFactorial(0);
73 getFactorial(30);
74
75 BigDecimal a = new BigDecimal(0.1); //double类型的构造函数
76 BigDecimal b = new BigDecimal("0.1"); //String类型的构造函数
77 BigDecimal c = new BigDecimal("0.10"); //String类型的构造函数
78 System.out.println("a = "+a.toString());
79 System.out.println("b = "+b.toString());
80 System.out.println("c = "+c.toString());
81 System.out.println("a.equals(b) = "+a.equals(b)); //进行字符串的比较
82 System.out.println("a.compareTo(b) = "+a.compareTo(b)); //进行数值的比较,a是double构造对象,大于b
83 System.out.println("b.compareTo(c) = "+b.compareTo(c));
84
85 }
86 }
87
88 处理结果:
89 0.01+0.05 = 0.06
90 1.0-0.42 = 0.58
91 4.015*100.0 = 401.5000
92 123.3/100.0 = 1.2
93 123.3/100.0 = 1.2
94 -1
95 0
96 265252859812191058636308480000000
97 a = 0.1000000000000000055511151231257827021181583404541015625
98 b = 0.1
99 c = 0.10
100 a.equals(b) = false
101 a.compareTo(b) = 1
102 b.compareTo(c) = 0