𝓝𝓮𝓶𝓸&博客

【Java】Math类的基本操作

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.2

```
BigDecimal 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。
    
posted @ 2020-03-19 22:27  Nemo&  阅读(487)  评论(0编辑  收藏  举报