Java API – Math类-System类-BigDecimal类的常用API

Math类介绍

包含执行基本数字运算的方法,Math类没有提供公开的构造器。
因为Math类是一个工具类, 不需要创建对象; Math类的成员都是静态的,通过类名就可以直接调用

Math类常用方法

方法名说明abs(int a)获取参数绝对值ceil(double a)向上取整floor(double a)向下取整round(float a)四舍五入max(int a,int b)获取两个int值中的较大值pow(double a,double b)返回a的b次幂的值random()返回值为double的随机值,范围[0.0,1.0)

演示代码:

public class MathDemo {
    public static void main(String[] args) {

        System.out.println(Math.abs(-100));

        System.out.println(Math.ceil(10.000001));

        System.out.println(Math.floor(10.99999));

        System.out.println(Math.round(100.5));
        System.out.println(Math.round(100.4));

        System.out.println(Math.max(10, 100));

        System.out.println(Math.pow(2, 3));

        System.out.println(Math.random());
    }
}

System类的概述

System也是一个工具类,代表了当前系统,提供了一些与系统相关的方法。

System类常用方法

方法名说明exit(int status)终止当前运行的 Java 虚拟机,参数非零表示异常终止currentTimeMillis()返回当前系统的时间毫秒值形式

exit方法: 终止当前运行虚拟机

public class SystemDemo {
    public static void main(String[] args) {
        System.out.println("程序开始....");
        System.exit(0);
        System.out.println("程序结束....");
    }
}

currentTimeMillis方法: 获取当前系统的时间毫秒值, 称为时间毫秒值

计算机认为时间是有起点的,起始时间: 1970年1月1日 00:00:00
时间毫秒值:指的是从1970年1月1日 00:00:00走到此刻的总的毫秒数,应该是很大的。 1s = 1000ms。

原因:

1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会,开始着手创造一个全新的革命性的操作系统,他使用B编译语言在老旧的PDP-7机器上开发出了Unix的一个版本。
随后,汤普逊和同事丹尼斯里奇改进了B语言,开发出了C语言,重写了UNIX。

演示代码:

public class SystemDemo2 {
    public static void main(String[] args) {
        long time = System.currentTimeMillis();
        System.out.println(time);
    }
}

BigDecimal的作用:

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

public class BigDecimal {
    public static void main(String[] args) {

        System.out.println(0.09 + 0.01);
        System.out.println(1.0 - 0.32);
        System.out.println(1.015 * 100);
        System.out.println(1.301 / 100);

        double c = 0.1 + 0.2;
        System.out.println(c);
    }
}

BigDecimal使用步骤:

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

public class BigDecimalDemo {
    public static void main(String[] args) {
        double a = 0.11;
        double b = 0.12;

        BigDecimal num1 = BigDecimal.valueOf(a);
        BigDecimal num2 = BigDecimal.valueOf(b);
    }
}

BigDecimal常用API

方法名说明add(BigDecimal b)加法subtract(BigDecimal b)减法multiply(BigDecimal b)乘法divide(BigDecimal b)除法divide (另一个BigDecimal对象,精确几位,舍入模式)除法

方法使用演示:

加法add 减法subtract

public class BigDecimalDemo {
    public static void main(String[] args) {
        double a = 0.1;
        double b = 0.2;
        BigDecimal num1 = BigDecimal.valueOf(a);
        BigDecimal num2 = BigDecimal.valueOf(b);

        System.out.println(num1.add(num2));

        System.out.println(num1.subtract(num2));
    }
}

乘法multiply 除法divide

public class BigDecimalDemo {
    public static void main(String[] args) {
        double a = 0.1;
        double b = 0.2;
        BigDecimal num1 = BigDecimal.valueOf(a);
        BigDecimal num2 = BigDecimal.valueOf(b);

        System.out.println(num1.multiply(num2));

        System.out.println(num1.divide(num2));
    }
}

我们最终想要得到的类型是double类型, 通过方法doubleValue

public class BigDecimalDemo {
    public static void main(String[] args) {
        double a = 0.1;
        double b = 0.2;

        BigDecimal num1 = BigDecimal.valueOf(a);
        BigDecimal num2 = BigDecimal.valueOf(b);
        BigDecimal num3 = num1.add(num2);

        double res = num3.doubleValue();
        System.out.println(res);
    }
}

注意事项: BigDecimal是一定要进行精度运算的(例如下面代码遇到除不尽的情况, 程序就会崩掉)

public class BigDecimalDemo {
    public static void main(String[] args) {
      BigDecimal number1 = BigDecimal.valueOf(10.0);
      BigDecimal number2 = BigDecimal.valueOf(0.3);
      System.out.println(number1.divide(number2));
    }
}

解决方法: 使用divide方法时指定参数 divide (另一个BigDecimal对象,精确几位,舍入模式)
舍入模式:

  • 四舍五入: RoundingMode.HALF_UP
  • 向上取整: RoundingMode.CEILING
  • 向下取整: RoundingMode.FLOOR
public class BigDecimalDemo {
    public static void main(String[] args) {
      BigDecimal number1 = BigDecimal.valueOf(10.0);
      BigDecimal number2 = BigDecimal.valueOf(0.3);

      System.out.println(number1.divide(number2));
    }
}

小结:

BigDecimal的作用是什么?

解决浮点型运算精度失真问题。

BigDecimal的对象如何获取?

通过valueOf方法: BigDecimal b1 = BigDecimal.valueOf(0.1);

Original: https://blog.csdn.net/m0_71485750/article/details/127282133
Author: 蓝桉cyq
Title: Java API – Math类-System类-BigDecimal类的常用API

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/722137/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球