文章目录
Math类
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)); // 100
// 向上取整
System.out.println(Math.ceil(10.000001)); // 11.0
// 向下取整
System.out.println(Math.floor(10.99999)); // 10.0
// 四舍五入
System.out.println(Math.round(100.5)); // 101
System.out.println(Math.round(100.4)); // 100
// 取两个int的较大值
System.out.println(Math.max(10, 100)); // 100
// 返回a的b次幂
System.out.println(Math.pow(2, 3)); // 8.0
// 返回一个范围在[0.0,1.0)之间随机数,包含0不包含1
System.out.println(Math.random());
}
}
System类
System类的概述
System也是一个工具类,代表了当前系统,提供了一些与系统相关的方法。
System类常用方法
方法名 | 说明 |
---|---|
exit(int status) | 终止当前运行的 Java 虚拟机,参数非零表示异常终止 |
currentTimeMillis() | 返回当前系统的时间毫秒值形式 |
exit方法: 终止当前运行虚拟机
public class SystemDemo {
public static void main(String[] args) {
System.out.println("程序开始....");
System.exit(0); // 中转JVM,后续代码不会执行
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类
BigDecimal的作用:
用于解决浮点型运算精度失真的问题
public class BigDecimal {
public static void main(String[] args) {
// 浮点型运算的时候直接 加 减 乘 除 可能会出现数据失真(精度问题)。
System.out.println(0.09 + 0.01); // 0.09999999999999999
System.out.println(1.0 - 0.32); // 0.6799999999999999
System.out.println(1.015 * 100); // 101.49999999999999
System.out.println(1.301 / 100); // 0.013009999999999999
double c = 0.1 + 0.2;
System.out.println(c); // 0.30000000000000004
}
}
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)); // 0.3
// 减法
System.out.println(num1.subtract(num2)); // -0.1
}
}
乘法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)); // 0.02
// 除法
System.out.println(num1.divide(num2)); // 0.5
}
}
我们最终想要得到的类型是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);
// 将BigDecimal转回double类型
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)); // 除不尽33.3333...
}
}
解决方法: 使用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)); // 33.33
}
}
小结:
BigDecimal的作用是什么?
解决浮点型运算精度失真问题。
BigDecimal的对象如何获取?
通过valueOf方法:
BigDecimal b1 = BigDecimal.valueOf(0.1);
原文地址:https://lanan.blog.csdn.net
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。