处理大数据

  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