六、BigDecimal 类的使用
-
位置:java.math包中。
-
作用:精确计算浮点数。
-
创建方式:BigDecimal bd=new BigDecimal (“1.0”);
-
方法:
- BigDecimal add(BigDecimal bd) 加
- BigDecimal subtract(BigDecimal bd) 减
- BigDecimal multiply(BigDecimal bd) 乘
- BigDecimal divide(BigDecimal bd) 除
-
除法:divide(BigDecimal bd,int scal,RoundingMode mode)
-
参数scal :指定精度到小数点后几位。
-
参数mode :
- 指定小数部分的取舍模式,通常采用四舍五入的模式。
- 取值为BigDecimal.ROUND_HALF_UP。
package com.zhuo.qf_5;
import java.math.BigDecimal;
import java.util.zip.Adler32;
public class Demo7 {
public static void main(String[] args) {
double d1=1.0;
double d2=0.9;
System.out.println(d1-d2); //0.09999999999999998
//面试题
double result=(1.4-0.5)/0.9;
System.out.println(result); //0.9999999999999999
//BigDecimal,大的浮点数精确计算
BigDecimal bd1=new BigDecimal("1.0");
BigDecimal bd2=new BigDecimal("0.9");
//减法
BigDecimal r1=bd1.subtract(bd2);
System.out.println(r1); //0.1
//加法
BigDecimal r2=bd1.add(bd2);
System.out.println(r2); //1.9
//乘法
BigDecimal r3=bd1.multiply(bd2);
System.out.println(r3); //0.90
//除法
BigDecimal r4=new BigDecimal("1.4")
.subtract(new BigDecimal("0.5"))
.divide(new BigDecimal("0.9"));
System.out.println(r4); //1
//BigDecimal.ROUND_HALF_UP四舍五入
BigDecimal r5=new BigDecimal("20").divide(new BigDecimal("3"), 2, BigDecimal.ROUND_HALF_UP);
System.out.println(r5); //6
}
}
1. Date类
- Date表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已经被Calendar类中的方法所取代。
- 时间单位
- 1秒=1000毫秒
- 1毫秒=1000微秒
- 1微秒=1000纳秒
- toString 方法:将此
Date
对象转换为String
的形式 - getTIme 方法:返回自1970年1月1日以来,由此
Date
对象表示的00:00:00 GMT的毫秒数
- toLocaleString 方法:(已弃用)从JDK 1.1版开始,由
DateFormat.format(Date date)
替换。 - after 方法:测试此日期是否在指定日期之后。
- before 方法:测试此日期是否在指定日期之前。
- compareTo 方法:比较;如果参数Date等于此Date,则值为0;如果此日期在Date参数之前,该值小于0;如果此日期在Date参数之后,则值大于0。
package com.zhuo.qf_6;
import java.util.Date;
public class Demo1 {
public static void main(String[] args) {
//1 创建Date对象
//今天
Date date1=new Date();
System.out.println(date1.toString());//Fri Jul 08 21:18:07 CST 2022
System.out.println(date1.toLocaleString());//2022年7月8日 下午9:18:07
//昨天
Date date2=new Date(date1.getTime()-(60*60*24*1000));
System.out.println(date2.toLocaleString()); //2022年7月7日 下午9:18:07
//2 方法after 和 before
boolean b1=date1.after(date2);
System.out.println(b1); //true
boolean b2=date1.before(date2);
System.out.println(b2); //false
//比较 comparaTo();
int d=date1.compareTo(date2); // date1-date2:大于0为正数,小于0为负数
System.out.println(d);//1
}
}
2. Calendar类
- Calendar提供了获取或设置各种日历字段的方法。
- 构造方法
- protected Calendar( ):由于修饰符是protected,所以无法直接创建该对象
- 其他方法
package com.zhuo.qf_6;
import java.util.Calendar;
import javax.xml.datatype.XMLGregorianCalendar;
public class Demo2 {
public static void main(String[] args) {
//1 创建Calendar对象
Calendar calendar=Calendar.getInstance();
System.out.println(calendar.getTime().toLocaleString()); //2022年7月9日 上午9:39:21
System.out.println(calendar.getTimeInMillis()); //1657330761840
//2 获取时间信息
//获取年
int year=calendar.get(Calendar.YEAR);
//月
int month=calendar.get(Calendar.MONTH);
//日
int day=calendar.get(Calendar.DAY_OF_MONTH);//Date
//小时
int hour=calendar.get(Calendar.HOUR_OF_DAY);//HOUR:12小时;HOUR_OF_DAY:24小时
//分钟
int minute=calendar.get(Calendar.MINUTE);
//秒
int second=calendar.get(Calendar.SECOND);
System.out.println(year+"年"+(month+1)+"月"+day+"日"+hour+":"+minute+":"+second);
//2022年7月9日9:39:21
//3 修改时间
Calendar calendar2=Calendar.getInstance();
calendar2.set(Calendar.DAY_OF_MONTH,5); //改为5日
System.out.println(calendar2.getTime().toLocaleString()); //2022年7月5日 上午9:39:21
//4 add方法修改时间
calendar2.add(Calendar.HOUR,2);
System.out.println(calendar2.getTime().toLocaleString()); //2022年7月5日 上午11:39:21
//5 补充方法
int max=calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);
int min=calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);
System.out.println(max); //31
System.out.println(min); //1
}
}
3. SimpleDateFormat 类
- SimpleDateFormat是一个以与语言环境有关的方法来格式化和解析日期的具体类。
- 格式化方法format( ):(日期转字符串)、解析方法parse( ):(字符串转日期)。
- 常用的时间模式字母
package com.zhuo.qf_6;
import java.awt.image.DataBufferByte;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo3 {
public static void main(String[] args) throws Exception {
//1 创建SimpleDateFormat对象 y年 M月 d日
//SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd");
//2 创建Date
Date date=new Date();
// 格式化方法format():把日期转成字符串
String str=sdf.format(date);
System.out.println(str);
// 解析方法parse():把字符串转成日期
Date date2=sdf.parse("2002/12/02");
System.out.println(date2);
}
4. System类
- System系统类,主要用于获取系统的属性数据和其他操作,构造方法私有的。
package com.zhuo.qf_6;
import com.zhuo.qf.Student;
public class Demo4 {
public static void main(String[] args) {
//1 arraycopy:数组的复制
//src:源数组
//srcPos:从那个位置开始复制到0
//dest:目标数组
//destPos:目标数组的位置
//length:复制的长度
int[] arr= {20,18,15,8,35,26,45,90};
int[] dest=new int[8];
//System.arraycopy(src,srcPos,dest,destPos,length);
System.arraycopy(arr, 0, dest, 0, arr.length);
for(int i=0;i<dest.length;i++) {
System.out.println(dest[i]);
}
//Arrays.copyOf(original, newLength)
System.out.println(System.currentTimeMillis());
long start=System.currentTimeMillis();
for(int i=-9999999;i<9999999;i++) {
for(int j=-999999;j<9999999;j++) {
int result=i+j;
}
}
//2 获取毫秒数
long end=System.currentTimeMillis();
System.out.println("用时:"+(end-start));
new Student("秋刀鱼",19);
new Student("陆远",21);
//3 回收垃圾
System.gc(); //告诉垃圾回收器回收
//4 退出jvm
System.exit(0); //正常退出
}
}