Math类
Math 类是数学操作类,提供了一系列的数学操作方法,包括求绝对值、三角函数等,在 Math 类中提供的一切方法都是静态方法(类方法),所以直接由类名称调用即可。
Math类的基本操作:
方法 | 返回类型 | 描述 | 备注 |
---|---|---|---|
abs(int a) | int | 取绝对值 | ABSolute |
sqrt(double a) | double | 平方根 | SQuare RooT |
max(int a, int b) | int | 取两数的最大值 | |
min(int a, int b) | int | 取两数的最小值 | |
pow(double base, double exponent) | double | 第一个参数的第二个参数次方 | power:次方 base:底数 exponent:指数 |
round(float a) | int | 四舍五入 | round off Math.floor(x+0.5) |
random() | double | 随机数 | 0.0~1.0之间的小数(包括0.0不包括1.0) |
ceil(double a) | double | 向上取整 | 天花板 |
floor(double a) | double | 向下取整 | 地板 |
例子
System.out.println("求平方根:" + Math.sqrt(9.0));
System.out.println("求两数的最大值:" + Math.max(10, 30));
System.out.println("求两数的最小值:" + Math.min(10, 30));
System.out.println("2的3次方:" + Math.pow(2, 3));
System.out.println("四舍五入:" + Math.round(33.6));
System.out.println("取1~100之间的随机数:" + ((int)(Math.random()*100)+1));
程序运行结果:
求平方根:3.0
求两数的最大值:30
求两数的最小值:10
2的3次方:8.0
四舍五入:34
取1~100之间的随机数:1
注意:Math类中的 round() 方法的主要作用是进行四舍五入操作,但是此方法在操作时将小数点后面的全部数字都忽略掉,如果想精确到小数点后的精确位数,则必须使用 BigDecimal 类完成。
BigDecimal
由于这个不是基本数据类型,所以如果想要进行运算(如 加减乘除),得使用它的方法,不能直接用符号运算(如 +、-)。
八种舍入模式解释如下:
ROUND_UP
舍入远离零的舍入模式。
在丢弃非零部分之前始终增加数字(始终对非零舍弃部分前面的数字加 1)。注意:此舍入模式始终不会减少计算值的大小。
BigDecimal c = new BigDecimal("2.224667").setScale(2, BigDecimal.ROUND_UP); System.out.println(c);//2.23 跟上面相反,进位处理
ROUND_DOWN
接近零的舍入模式。
在丢弃某部分之前始终不增加数字(从不对舍弃部分前面的数字加 1,即 截短)。注意:此舍入模式始终不会增加计算值的大小。
BigDecimal b = new BigDecimal("2.225667").setScale(2, BigDecimal.ROUND_DOWN); System.out.println(b);//2.22 直接去掉多余的位数
ROUND_CEILING
接近正无穷大的舍入模式。
如果 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;
如果为负,则舍入行为与 ROUND_DOWN 相同。注意:此舍入模式始终不会减少计算值。
BigDecimal f = new BigDecimal("2.224667").setScale(2, BigDecimal.ROUND_CEILING); System.out.println(f);//2.23 如果是正数,相当于BigDecimal.ROUND_UP BigDecimal g = new BigDecimal("-2.225667").setScale(2, BigDecimal.ROUND_CEILING); System.out.println(g);//-2.22 如果是负数,相当于BigDecimal.ROUND_DOWN
ROUND_FLOOR
接近负无穷大的舍入模式。
如果 BigDecimal 为正,则舍入行为与 ROUND_DOWN 相同;
如果为负,则舍入行为与 ROUND_UP 相同。注意:此舍入模式始终不会增加计算值。
BigDecimal h = new BigDecimal("2.225667").setScale(2, BigDecimal.ROUND_FLOOR); System.out.println(h);//2.22 如果是正数,相当于BigDecimal.ROUND_DOWN BigDecimal i = new BigDecimal("-2.224667").setScale(2, BigDecimal.ROUND_FLOOR); System.out.println(i);//-2.23 如果是负数,相当于BigDecimal.ROUND_HALF_UP
ROUND_HALF_UP
向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。
如果舍弃部分 >= 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同。注意:这是我们大多数人在小学时就学过的舍入模式(四舍五入)。
BigDecimal d = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_UP); System.out.println("ROUND_HALF_UP"+d); //2.23 四舍五入(若舍弃部分>=.5,就进位)
ROUND_HALF_DOWN
向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。
如果舍弃部分 > 0.5,则舍入行为与 ROUND_UP 相同;否则舍入行为与 ROUND_DOWN 相同(五舍六入)。BigDecimal e = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_DOWN); System.out.println("ROUND_HALF_DOWN"+e);//2.22 四舍五入(若舍弃部分>.5,就进位)
ROUND_HALF_EVEN
向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
如果舍弃部分左边的数字为奇数,则舍入行为与 ROUND_HALF_UP 相同;
如果为偶数,则舍入行为与 ROUND_HALF_DOWN 相同。注意:在重复进行一系列计算时,此舍入模式可以将累加错误减到最小。
此舍入模式也称为“银行家舍入法”,主要在美国使用。四舍六入,五分两种情况。
如果前一位为奇数,则入位,否则舍去。
以下例子为保留小数点1位,那么这种舍入方式下的结果。
1.15>1.2 1.25>1.2BigDecimal j = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_EVEN); System.out.println(j);//2.22 如果舍弃部分左边的数字为偶数,则作 ROUND_HALF_DOWN BigDecimal k = new BigDecimal("2.215").setScale(2, BigDecimal.ROUND_HALF_EVEN); System.out.println(k);//2.22 如果舍弃部分左边的数字为奇数,则作 ROUND_HALF_UP
ROUND_UNNECESSARY
断言请求的操作具有精确的结果,因此不需要舍入。
如果对获得精确结果的操作指定此舍入模式,则抛出 ArithmeticException。BigDecimal l = new BigDecimal("2.215").setScale(3, BigDecimal.ROUND_UNNECESSARY); System.out.println(l); //断言请求的操作具有精确的结果,因此不需要舍入。 //如果对获得精确结果的操作指定此舍入模式,则抛出ArithmeticException。