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

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);
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容