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
}
}