java基础学习十四之BigDecimal类与常用日期时间类

发布时间:2024-12-17 23:23

学习基础编程语言如Java或JavaScript #生活技巧# #工作学习技巧# #数字技能训练#

1.BigDecimal

简述:

BigDecimal类处理高精度计算

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Double.valueOf(String) 和Float.valueOf(String)会丢失精度。所以开发中,如果我们需要精确计算的结果,则必须使用BigDecimal类来操作

1.1.BigDecimal类的常用的几个构造方法: BigDecimal(int):将int表示形式转换为BigDecimal对象BigDecimal(String) :将字符串表示形式转换为BigDecimal对象(浮点数尽量使用字符串重载方法,别问为什么)BigDecimal(double):将double表示形式转换为BigDecimal对象 1.2.BigDecimal类的常用方法: add(BigDecimal):BigDecimal对象中的值相加,返回BigDecimal对象subtract(BigDecimal):BigDecimal对象中的值相减,返回BigDecimal对象multiply(BigDecimal):BigDecimal对象中的值相乘,返回BigDecimal对象divide(BigDecimal):BigDecimal对象中的值相除,返回BigDecimal对象(商为无限小数时需要使用它的重载方法传入保留几位小数,和保留方式(如:四舍五入))toString():将BigDecimal对象中的值转换成字符串doubleValue():将BigDecimal对象中的值转换成双精度数floatValue():将BigDecimal对象中的值转换成单精度数longValue():将BigDecimal对象中的值转换成长整数intValue():将BigDecimal对象中的值转换成整数 1.3.保留方式: BigDecimal.ROUND_HALF_UP表示四舍五入,BigDecimal.ROUND_HALF_DOWN也是五舍六入,BigDecimal.ROUND_UP表示进位处理(就是直接加1),BigDecimal.ROUND_DOWN表示直接去掉尾数。

代码演示:

package com.qianfeng.cl;

import java.math.BigDecimal;

public class DemoBigDecimal {

public static void main(String[] args) {

BigDecimal big1 = new BigDecimal("1.0");

BigDecimal big2 = new BigDecimal("0.9");

BigDecimal big3 = big1.add(big2);

System.out.println(big3.doubleValue());

System.out.println(big1.subtract(big2));

System.out.println(big1.multiply(big2));

System.out.println(big1.divide(big2,2,BigDecimal.ROUND_HALF_UP));

BigDecimal a = new BigDecimal (45);

BigDecimal b = new BigDecimal (78);

if(a.compareTo(b) == -1){

System.out.println("a小于b");

}

if(a.compareTo(b) == 0){

System.out.println("a等于b");

}

if(a.compareTo(b) == 1){

System.out.println("a大于b");

}

if(a.compareTo(b) > -1){

System.out.println("a大于等于b");

}

if(a.compareTo(b) < 1){

System.out.println("a小于等于b");

}

BigDecimal big4 = new BigDecimal("1024.1234").setScale(2,BigDecimal.ROUND_HALF_UP);

System.out.println(big4);

}

}

运行结果如下:

2.日期时间常用类

2.1 统一概念:

标准时间

UTC(Universal Time Coordinated),即协调世界时。全世界统一的世界标准时间。需要不规则加入闰秒。GMT(Greenwich Mean Tim),格林尼治平均时间。一般认为UTC和GMT是相等的,但是会存在0.9秒以内的误差,这是由于地球不规则自转引起的。

时区

本地时间,UTC+时区。东为正西为负。比如北京时间在东八区就是 UTC+(+0800)。DST,夏令时。是指夏天太阳升起比较早,将时钟拨快一个小时来提早日光的使用。欧美主要国家都引用了这个做法。如果在夏令时时区内 DST=UTC+时区+1。

时间戳

1900.01.01 00:00:00

Unix时间(戳),表示当前时间到1970年1月1日00:00:00 UTC对应的秒数。

时间戳,示当前时间到1970年1月1日00:00:00 UTC对应的毫秒数。

java中可使用System.currentTimeMillis()或者其他方法获得

2.2 Date和SimpleDateFormat java.util.Date类:表示特定的瞬间,精确到毫秒。SimpleDateFormat类:将显示的日期信息格式化

代码演示:

package com.qianfeng.cl;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

public class DemoDate {

public static void main(String[] args) throws ParseException {

Date date = new Date();

System.out.println(date);

SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String date2 = simpleDate.format(date);

System.out.println(date2);

Date date3 = simpleDate.parse("1970-01-01 00:00:00");

System.out.println(date3);

}

}

运行结果如下:

2.3 Calendar

Calendar类(日历)是一个抽象基类,主要用于完成日期字段之间相互操作的功能。

代码演示:

package com.qianfeng.cl;

import java.util.Calendar;

import java.util.Date;

public class DemoCalendar {

public static void main(String[] args) {

Calendar calendar = Calendar.getInstance();

System.out.println(calendar.get(Calendar.YEAR));

System.out.println(calendar.get(Calendar.MONTH)+1);

System.out.println(calendar.get(Calendar.DATE));

System.out.println(calendar.get(Calendar.DAY_OF_WEEK));

System.out.println(calendar.get(Calendar.HOUR_OF_DAY));

System.out.println(calendar.get(Calendar.MINUTE));

System.out.println(calendar.get(Calendar.SECOND));

System.out.println(calendar.getTime());

calendar.setTime(new Date());

System.out.println(calendar.getTimeInMillis());

}

}

运行结果如下:

日期类之间的互转:

JDk 8 中表示日期和时间的类有多个如下:

Instant :它代表的是时间戳,表示时刻,不直接对应年月日信息,需要通过时区转换LocalDateTime:表示与时区无关的日期和时间信息,不直接对应时刻,需要通过时区转换LocalDate :表示与时区无关的日期,与LocalDateTime相比,只有日期信息,没有时间信息LocalTime :表示与时区无关的时间,与LocalDateTime相比,只有时间信息,没有日期信息ZonedDateTime :表示特定时区的日期和时间ZoneId/ZoneOffset :表示时区

1.LocalDate转Date

LocalDate nowLocalDate = LocalDate.now();

Date date =

Date.from(localDate.atStartOfDay(ZoneOffset.ofHours(8)).toInstant());

2.LocalDateTime转Date

LocalDateTime localDateTime = LocalDateTime.now();

Date date =

Date.from(localDateTime.atZone(ZoneOffset.ofHours(8)).toInstant());

3.Date转LocalDateTime(LocalDate)

Date date =newDate();

LocalDateTime localDateTime =

date.toInstant().atZone(ZoneOffset.ofHours(8)).toLocalDateTime();

LocalDate localDate =

date.toInstant().atZone(ZoneOffset.ofHours(8)).toLocalDate();

4.LocalDate转时间戳

LocalDate localDate = LocalDate.now();

longtimestamp =

localDate.atStartOfDay(ZoneOffset.ofHours(8)).toInstant().toEpochMilli();

5.LocalDateTime转时间戳

LocalDateTime localDateTime = LocalDateTime.now();

longtimestamp = localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();

6.时间戳转LocalDateTime(LocalDate)

longtimestamp = System.currentTimeMillis();

LocalDate localDate =

Instant.ofEpochMilli(timestamp).atZone(ZoneOffset.ofHours(8)).toLocalDate();

LocalDateTime localDateTime =

Instant.ofEpochMilli(timestamp).atZone(ZoneOffset.ofHours(8)).toLocalDateTime();

网址:java基础学习十四之BigDecimal类与常用日期时间类 https://www.yuejiaxmz.com/news/view/504034

相关内容

Java实现电子钱包系统:从基础架构到安全支付的全面指南
A =Java基础与源码
Java 零基础入门学习(小白也能看懂!)
【Java】基础类型之float(八)
重学 Java 设计模式:实战策略模式「模拟多种营销类型优惠券,折扣金额计算策略场景」
Java基础与入门教程,解锁百度网盘中的宝藏资源
基础加强学习总结之反射
Java基于app的学生任务和时间规划(开题+源码)
java基础
基于java的家教系统设计与实现

随便看看