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
转载于:https://www.cnblogs.com/celine/p/8306359.html