day05MathBigInteger

61 阅读2分钟

Math

final double PI: 常量,代表圆周率
 int abs(int a): 返回参数的绝对值
 double ceil(double a): 返回大于或等于参数的最小double值,等于一个整数
 double floor(double a): 返回小于或等于参数的最大double值,等于一个整数
 int round(float a): 按照四舍五入返回最接近参数的int
 double pow(double a, double b): 计算a的b次方
  以上方法中必须掌握ceil方法 后面学习分页查询 
public class Demo01Math {
    public static void main(String[] args) {
        System.out.println(Math.PI);//圆周率
        System.out.println(Math.abs(-6));//6 
        System.out.println(Math.ceil(5.2));//6   
        System.out.println(Math.floor(5.2));//5  
        System.out.println(Math.round(6.0));//6   
        //水仙花数字153: 1*1*1 + 5*5*5 + 3*3* = 153
        System.out.println(Math.pow(1,3)+Math.pow(5,3)+Math.pow(3,3)); 
    }
}

BigInteger

整数的范围超过了基本类型整数取值范围最大的long类型 怎么办呢?
解决方案: 大整数   java.math.BigInteger类: 代表超级大的整数,不可变的任意精度的整数。
 参数: 必须是String类型的数字,内部不能出现非数字内容
  add subtrac multiply  divide
   //报错: ""中不能有非数字符号
        //BigInteger b2 = new BigInteger("3333333333a3333333333");
        //调用add方法完成加法计算
        BigInteger b3 = b1.add(b2);
 小数的范围超过了基本类型小数取值范围最大的double类型,怎么办呢?
解决方案: 大小数 java.math.BigDecimal类: 代表超级大的小数,不可变的、任意精度的小数。 
/*
    使用double加减乘除出现损失精度的问题  不允许: 钱的问题 
    解决方案: 使用java.math.BigDecimal类 
 */
对于 除法 运算,可能会出现 无限循环/无限不循环的结果
 然而BigDecimal是用来完成超级精确的数学运算,这样就导致 BigDecimal不知道到底给你什么样的结果
 解决方案:   (1)告诉它保留多少位小数   (2)如何保留小数
 public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode):
            按照方法参数指定的保留位数以及保留方式做除法运算
            参数:
                 int scale: 要保留几位小数
                 int roundingMode: 如何保留小数
                        BigDecimal.ROUND_UP 向上加1。
                        BigDecimal.ROUND_DOWN 直接舍去。
                        BigDecimal.ROUND_HALF_UP 四舍五入。
 public class Demo05BigDecimal {
    public static void main(String[] args) {
        //创建BigDecimal类的对象
        BigDecimal b1 = new BigDecimal("10.0");
        //报错: ""中不能有非数字符号
        //BigDecimal b2 = new BigDecimal("666a6666.666666666");
        BigDecimal b2 = new BigDecimal("3.0"); 
        BigDecimal b3 = b1.divide(b2,8,BigDecimal.ROUND_DOWN);
        System.out.println(b3);//0.33333333 
        BigDecimal b4 = b1.divide(b2, 5, BigDecimal.ROUND_UP);
        System.out.println(b4);//0.33334  
        BigDecimal b6 = b1.divide(b2, 5, BigDecimal.ROUND_HALF_UP);
        System.out.println(b6);//0.33333
    }
}