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);