BigDecimal 类的使用

六、BigDecimal 类的使用

在这里插入图片描述

  • 位置:java.math包中。

  • 作用:精确计算浮点数。

  • 创建方式:BigDecimal bd=new BigDecimal (“1.0”);

  • 方法:

    1. BigDecimal add(BigDecimal bd) 加
    2. BigDecimal subtract(BigDecimal bd) 减
    3. BigDecimal multiply(BigDecimal bd) 乘
    4. BigDecimal divide(BigDecimal bd) 除

在这里插入图片描述

  • 除法:divide(BigDecimal bd,int scal,RoundingMode mode)

  • 参数scal :指定精度到小数点后几位。

  • 参数mode :

    1. 指定小数部分的取舍模式,通常采用四舍五入的模式。
    2. 取值为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. 1秒=1000毫秒
    2. 1毫秒=1000微秒
    3. 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); //正常退出
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xjz_2002

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值