BigDecimal类
一.使用场景
- float和double类型的值存储方式为近似存储,在某些精度要求高的行业需要精确存储数据,则需要使用BigDecimal类
二.BigDecimal类介绍
- 位置:java.math包
- 作用:精确计算浮点数
- 创建方式:BigDecimal bd = new BigDecimal(”1.0“);
- 方法:
- 加:add()
- 减:subtract()
- 乘:multiply()
- 除:divide()
- 除法除不尽:divide(BigDecimal bd,int scale,RoudingMode mode)
- scale:保留的小数位数
- mode:指定小数部分的取舍模式,通常采用四舍五入(ROUND_HALF_UP)
//double类型计算
double d1 = 1.0;
double d2 = 0.9;
System.out.println(d1-d2);
//BigDecimal类型计算
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("0.9");
//减法
BigDecimal r1 = bd1.subtract(bd2);
System.out.println(r1);
//加法
System.out.println(bd1.add(bd2));
//乘法
System.out.println(bd1.multiply(bd2));
//除法
BigDecimal r2 = new BigDecimal("1.5")
.subtract(new BigDecimal("0.6"))
.divide(new BigDecimal("0.9"));
System.out.println(r2);
//除法,除不尽,保留位数
BigDecimal r3 = new BigDecimal("10")
.divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP);
//四舍五入保留两位小数
System.out.println(r3);
//输出结果:
-----double类型计算------
0.09999999999999998
-----BigDecimal类型计算------
0.1
1.9
0.90
1
3.33
Date类
- Date表示特定的时间,精确到毫秒。
- Date类中的大部分方法都已经被Calender类中方法取代
//1.创建
//今天的时间
Date date1 = new Date();
System.out.println(date1.toString());
//昨天,今天的时间减去一天的毫秒数
Date date2 = new Date(date1.getTime()-(60*60*24*1000));
System.out.println(date2);
//2.after,before方法
System.out.println(date1.after(date2));
System.out.println(date1.before(date2));
//compareTo()方法,比较毫秒数
// d1.compareTo(d2):若d1在d2前,则返回1,d1在d2后则返回-1,相等则返回0
System.out.println(date1.compareTo(date2));
System.out.println(date1.compareTo(date1));
System.out.println(date2.compareTo(date1));
//输出结果:
Tue Aug 16 17:56:05 CST 2022
Mon Aug 15 17:56:05 CST 2022
true
false
1
0
-1
Calendar类
-
Calendar提供了获取或设置各种日历字段的方法
-
构造方法:
- protected Calendar():由于修饰符是protected,所以无法直接创建对象
-
其他方法:
- static Calendar getInstance() : 使用默认的时区和区域获得日历
- void set(int year,int mouth,int date,int hourofday,int minute,int second) : 设置日历的年,月,时分秒。
- int get(int field) : 返回给定日历字段的值。字段比如年月日等
- void setTime(Date date) : 用给定的Date设置此日历的时间。Date-Calendar
- Date getTime(): 返回一个Date表示此日历的时间。Calendar-Date
- void add(int field,int amount) :按照日历的规则给指定字段添加或减少时间量
- long getTimeInMillies() : 毫秒为单位返回该日历的时间值
//1.创建Calendar对象
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime().toString());
System.out.println(calendar.getTimeInMillis());//1970年1月1日至今的毫秒数
//2.获取时间信息
//年
int year = calendar.get(Calendar.YEAR);
//月,范围0-11
int month = calendar.get(Calendar.MONTH);
//日
int date = calendar.get(Calendar.DATE);
//时 HOUR:12小时,HOUR_OF_DAY:24小时
int hour = calendar.get(Calendar.HOUR_OF_DAY);
//分
int minute = calendar.get(Calendar.MINUTE);
//秒
int second = calendar.get(Calendar.SECOND);
System.out.println(year + "年" + (month + 1) + "月" + date + "日" + hour + "时" + minute +"分" + second + "秒");
//3.修改时间
Calendar calendar1 =Calendar.getInstance();
calendar1.set(Calendar.DAY_OF_MONTH,5);
System.out.println(calendar1.getTime().toLocaleString());
//4.add方法修改时间
calendar1.add(Calendar.HOUR,1);
System.out.println(calendar1.getTime().toLocaleString());
//5.补充方法,获取某个字段最大值或者最小值
int max = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);//当前月份最多天数
int min = calendar.getActualMinimum(Calendar.DAY_OF_MONTH);//当前月份最小天数
System.out.println(max);
System.out.println(min);
//输出结果:
Tue Aug 16 23:06:47 CST 2022
1660662407448
2022年8月16日23时6分47秒
2022-8-5 23:06:47
2022-8-6 0:06:47
31
1
SimpleDateFormat类
- SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类
- 进行格式化:(日期----->文本);解析 :(文本------>日期)
- 常用的时间模式字母:
- y:年; M:月; d:日; H:小时; m:分钟 ; s:秒; S:毫秒
public static void main(String[] args) throws Exception{
//创建SimpleDateFormat对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
//创建Date
Date date = new Date();
//格式化date,把日期转为字符串
String str = sdf.format(date);
System.out.println(str);
//解析,把字符串转换为日期
Date date1 = sdf.parse("1997年03月12日20:13:23");//格式同sdf定义格式
System.out.println(date1.toLocaleString());
}
//输出结果:
2022年08月16日23:28:48
1997-3-12 20:13:23
System类
- System系统类,主要用于获取系统属性和其他操作,私有的构造方法
//1.复制数组
/**
* arraycopy:复制数组
*src:源数组
* srcPos:源数组复制开始的位置
* dest:目标数组
* destPos:目标数组复制的位置
* length:复制的长度
*/
int[] array = {11,22,33,44,55,66,77,88,99};
int[] dest = new int[8];
System.arraycopy(array,0,dest,4,4);
//从array的下标为0的元素开始复制4个到dest数组下标为4开始的位置
String str = Arrays.toString(dest);
System.out.println(str);
//2.毫秒数,计算代码执行时间
//开始时间
long start = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
for (int i = 0; i <999999 ; i++) {
sb.append(i);
}
//结束时间
long end = System.currentTimeMillis();
System.out.println("用时为:" + (end - start));
//3.gc操作
Student s1 =new Student("aaa",11);
Student s2 =new Student("bbb",12);
Student s3 =new Student("ccc",13);//有引用,不会被回收
System.gc();
new Student("aaa",11);
new Student("bbb",12);
new Student("ccc",13);//无引用,被回收(随机)
System.gc();
//4.退出JVM
System.exit(0);
System.out.println("看不见就是未执行");
//输出结果
[0, 0, 0, 0, 11, 22, 33, 44]
用时为:36
回收了ccc 13
回收了bbb 12
回收了aaa 11
标签:BigDecimal,int,System,Day04,println,Calendar,out
From: https://www.cnblogs.com/workplace-blog/p/16593718.html