美文网首页
25.面向对象进阶:常用API——Math、System、Big

25.面向对象进阶:常用API——Math、System、Big

作者: 每天起床都想摆 | 来源:发表于2022-02-02 21:20 被阅读0次

    Math

    Math类概述

    • 包含执行基本数字运算的方法,Math类没有提供公开的构造器

      因为其本质相当于是工具类,不需要创建对象,只是用于作为工具被使用

    • 使用类中成员的方法:

      • 看类的成员是否都是静态的,如果是,通过类名就可以直接调用

    Math类常用方法

    方法名 说明
    public static int abs(int a) 获取参数绝对值
    public static double ceil(double a) 向上取整(舍小数,个位加1:4.1 --> 5.0)
    public static double floor(double a) 向下取整(丢弃小数:4.1 --> 4.0)
    public static int int round(float a) 四舍五入
    public static int int max(int a, int b) 获取两个int值中的较大值
    public static double pow(double a, double b) 返回a的b次幂的值
    public static double random() 返回值为double的随机值,范围[0.0,1.0];包前不包后
    • 测试代码:

      package com.java.apitest;
      
      import static java.lang.Math.*;
      
      /**
       * Math常用方法综合测试
       */
      
      /*
      
       public  static  int  abs(int  a)                   | 获取参数绝对值
       public  static  double  ceil(double  a)            | 向上取整
       public  static  double  floor(double  a)           | 向下取整
       public  static  int  int  round(float  a)          | 四舍五入
       public  static  int  int  max(int  a,  int  b)     | 获取两个int值中的较大值
       public  static  double  pow(double  a,  double  b) | 返回a的b次幂的值
       public  static  double  random()                   | 返回值为double的随机值,范围[0.0,1.0]
      
       */
      
      public class MathTest {
          public static void main(String[] args) {
              System.out.println(abs(-1));
      
              System.out.println(ceil(4.1));
      
              System.out.println(floor(4.1));
      
              System.out.println(round(4.4));
              System.out.println(round(4.5));
      
              System.out.println(max(2,3));
      
              System.out.println(pow(2,3));
      
              System.out.println(random());
      
          }
      }
      /*
      1
      5.0
      4.0
      4
      5
      3
      8.0
      0.235730935219726
       */
      

    System

    System类概述

    • System的功能是通用的,都是直接用类名调用即可,所以System不能被实例化

    System类的常用方法

    方法名 说明
    public static void exit(int status) 零终止当前运行的Java虚拟机,非零表示异常终止
    public static long currentTimeMillis() 返回当前系统的时间毫秒值形式
    public static void arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数) 数组拷贝
    • 测试代码:

      package com.java.apitest;
      
      /*
      
      public  static  void  exit(int  status)                      | 零终止当前运行的Java虚拟机,非零表示异常终止
      public  static  long  currentTimeMillis()                    | 返回当前系统的时间毫秒值形式
      public  static  void  arraycopy(数据源数组,起始索引,目的地数组,起始索引,拷贝个数) | 数组拷贝
      
       */
      public class SystemTest {
          public static void main(String[] args) {
              System.out.println("测试开始");
              //System.exit(0); //JVM终止,后续代码停止运行
      
              //System.out.println(System.currentTimeMillis());
              //表示时间毫秒值。从1970-1-1,00:00:00 开始统计到现在的总时间毫秒值
              //用来作性能分析
              long startTime = System.currentTimeMillis(); // 性能分析起始时间
              for (int i = 0; i < 100000; i++) {
                  System.out.println(i);
              }
              long endTime = System.currentTimeMillis(); // 性能分析结束时间
              double time = (endTime - startTime) / 1000.0;
              System.out.println("for循环十万次花费:" + time);
      
      
              /*
          @IntrinsicCandidate
          public static native void arraycopy(Object src,  int  srcPos,
                                              Object dest, int destPos,
                                              int length);
               */
              /*
              参数一:被拷贝的数组
              参数二:从哪个索引开始拷贝
              参数三:复制的目标数组
              参数四:粘贴位置
              参数五:拷贝元素的个数
               */
      
              System.out.println("测试结束");
          }
      }
      
      

    BigDecimal

    BigDecimal概述

    • 用于解决浮点型运算精度失真的问题

    • 使用步骤:

      • 创建对象BigDecimal封装浮点型数据(最好的方式是调用方法)

      • public static BigDecimal valueOf(double val);       //包装浮点数成为BigDecimal对象
        

    BigDecimal常用API

    方法名 说明
    public BigDecimal add(BigDecimal b) 加法
    public BigDecimal subtract(BigDecimal b) 减法
    public BigDecimal multiply(BigDecimal b) 乘法
    public BigDecimal divide(BigDecimal b) 除法
    public BigDecimal divide(另一个BigDecimal对象,精确几位,舍入模式)(参照下方注意事项) 除法

    阿里巴巴Java开发规约

    image.png
    • 测试代码

      package com.java.apitest;
      
      import java.math.BigDecimal;
      
      /*
      public BigDecimal add(BigDecimal b)                          | 加法 |
      public BigDecimal subtract(BigDecimal b)                     | 减法 |
      public BigDecimal multiply(BigDecimal b)                     | 乘法 |
      public BigDecimal divide(BigDecimal b)                       | 除法 |
      public BigDecimal divide(另一个BigDecimal对象,精确几位,舍入模式) | 除法 |
       */
      public class BigDecimalTest {
          public static void main(String[] args) {
              double a = 0.1;
              double b = 0.2;
              double c = a + b;
              System.out.println(c);  //0.30000000000000004
      
              BigDecimal a1 = BigDecimal.valueOf(a);
              BigDecimal b1 = BigDecimal.valueOf(b);
              BigDecimal c1 = BigDecimal.valueOf(c);
      
              c1 = a1.add(b1);
              System.out.println(c1);
      
              c1 = a1.subtract(b1);
              c = a - b;
              System.out.println(c);
              System.out.println(c1);
      
              c1 = a1.multiply(b1);
              c = a * b;
              System.out.println(c);
              System.out.println(c1);
      
              c1 = a1.divide(b1);
              c = a / b;
              System.out.println(c);
              System.out.println(c1);
      
              double rs = c1.doubleValue();
              System.out.println(c1);
          }
      }
      
      

    注意事项

    • BigDecimal只是处理精度的手段,因此,计算的结果不能直接传递,即BigDecimal类型的值无法直接传递给别人,因此,需要对计算结果进行类型转换为double类型;处理方法是调用doubleValue()方法,如上述测试代码的最后部分

    • BigDecimal是一定要进行精度运算的,即处理的数据实际值不为精度值,则会崩溃,例如除法引起结果无限循环

      BigDecimal s = BigDecimal.valueOf(10.0);
      BigDecimal v = BigDecimal.valueOf(3.0);
      BigDecimal k = s.divide(v,2, RoundingMode.HALF_UP);
      /**
      * 参数一:除数
      * 参数二:保留小数位数
      * 参数三:舍入模式
      */
      System.out.println(k);
      

    相关文章

      网友评论

          本文标题:25.面向对象进阶:常用API——Math、System、Big

          本文链接:https://www.haomeiwen.com/subject/tszqkrtx.html