Java中的一些常用类

本文介绍了Java中处理时间的Date类,包括获取时间戳、比较时间以及格式化日期。同时,讲解了Math类提供的数学运算方法,如绝对值、四舍五入和随机数生成。针对浮点数精度问题,文章提到了BigDecimal类在金融项目中的重要性,用于进行精确的数值运算。
摘要由CSDN通过智能技术生成

常用类

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枚举类模式含义
0ROUND_UP直接进位
1ROUND_DOWN直接省略多余的小数
2ROUND_CEILING向正无穷方向舍入
3ROUND_FLOOR向负无穷方向传入
4ROUND_HALF_UP四舍五入,5上
5ROUND_HALF_DOWN四舍五入,5下
6ROUND_HALF_EVEN
7ROUND_UNNECESSARY不需要舍入模式

setScale方法格式化小数点位数

BigDecimal b = new BigDecimal("2.22");
setScale(1); // 默认ROUND_UNNECESSARY 不需要舍入模式
setScale(1, BigDecimal.ROUND_UP); // 指定舍入模式保留1位小数
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值