美文网首页
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