常用类
Date
时间类,包:java.util.Date
常用的方法
public static void main(String[] args) {
// 创建时间对象
Date d = new Date(); // new Date() 就是创建当前时间
d.getTime(); // 获取d那个时间的时间戳 返回long值
// 时间戳 从 1970-01-01 00:00:00 到对应时间的毫秒数 1000毫秒 == 1秒
// 比较时间的大小(早晚)
Date d2 = new Date(1674547400262L); // 根据时间戳创建该时刻时间
System.out.println(d2); // Tue Jan 24 16:03:20 CST 2023
d.before(d2); // 判断d是否早于d2
d.after(d2);
d.equals(d2);
// 时间格式化器 指定格式化方式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 使用格式化器将d2时间转化成一个指定的格式
String result = sdf.format(d2);
System.out.println(result); // 2023-01-24 16:03:20
String d3Str = "2022-03-02 08:00:00";
// 将字符串解析成时间格式 sdf觉得有可能会解析不了从而产生异常
try {
Date d3 = sdf.parse(d3Str);
} catch (ParseException e) {
e.printStackTrace();
}
}
Math
数学相关的工具,包:java.util.Math
包含了用于执行基本数学运算的属性和方法,Math类提供的方法都是static的
常用方法:
// 返回参数的绝对值
int a = -20;
int b = Math.abs(a);
// 四舍五入,返回一个最接近的 float->int 或 double->long 类型的值
float f = 1.6f;
int i = Math.round(f);
// 获取随机数,结果为0到1之间的小数,[0, 1)
double d = Math.random();
// max,min获取较大或较小值
Math.max(4, 6);
Math.min(4, 6);
// 还有其他数学方面的各种方法,比如平方根,正弦等
BigDecimal
public static void main(String[] args) {
System.out.println(0.2 + 0.1); // 0.30000000000000004
System.out.println(0.3 - 0.1); // 0.19999999999999998
System.out.println(0.2 * 0.1); // 0.020000000000000004
System.out.println(0.3 / 0.1); // 2.9999999999999996
}
无论是float还是double都是浮点数,而计算机是二进制的,浮点数会失去一定的精度。
但是在项目中(特别是金融项目),涉及金额要十分精确,所以需要BigDecimal用来对超过16位有效位的数进行精确的运算
包:java.math.BigDecimal
创建对象:
new BigDecimal(5);
new BigDecimal(5.5);
new BigDecimal(5L); // 不推荐
new BigDecimal("5.5"); // 最推荐
常用方法:
BigDecimal a = new BigDecimal("2.3");
BigDecimal b = new BigDecimal("4.3");
a.add(b); // 加
a.subtract(b); // 减
a.multiply(b); // 乘
a.divide(b); // 除
// 注意 运算完原来参与运算的值不改变,要接收运算的返回值得到结果
// 转成字符串返回
a.toString();
// 转成double返回
a.doubleValue();
// 转成float返回
a.floatValue();
// 转成int返回
a.intValue();
// 转成long返回
a.longValue();
divide除法需要特殊注意除不尽的情况:
divide最常使用的方法为
divide(BigDecimal divisor, int scale, int roundingMode)
或
divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
divisor:除数
scale:保留小数位
roundingMode:舍入模式
final值 | BigDecimal类静态常量 | RoundMode枚举类 | 模式含义 |
---|---|---|---|
0 | ROUND_UP | 直接进位 | |
1 | ROUND_DOWN | 直接省略多余的小数 | |
2 | ROUND_CEILING | 向正无穷方向舍入 | |
3 | ROUND_FLOOR | 向负无穷方向传入 | |
4 | ROUND_HALF_UP | 四舍五入,5上 | |
5 | ROUND_HALF_DOWN | 四舍五入,5下 | |
6 | ROUND_HALF_EVEN | ||
7 | ROUND_UNNECESSARY | 不需要舍入模式 |
setScale方法格式化小数点位数
BigDecimal b = new BigDecimal("2.22");
setScale(1); // 默认ROUND_UNNECESSARY 不需要舍入模式
setScale(1, BigDecimal.ROUND_UP); // 指定舍入模式保留1位小数