处理大数据
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