JAVA基础再回首(十三)——BigInteger类、BigDecimal类、Date类、DateFormat类、Calendar类
JAVA基础再回首(十三)——BigInteger类、BigDecimal类、Date类、DateFormat类、Calendar类
版权声明:转载必须注明本文转自程序员杜鹏程的博客:http://blog.csdn.net/m366917
今天的题外话:怎么保证自己的工作效率?
- 建立自己的规则。
- 提高远程办公效率,一定要为自己建立时间表的框架。
- 在硬行程之外,也不要轻易改变自己的工作流程。
- 不要试图用一种自己并不怎么了解的新工具去完成手上的工作,尤其在时间有限的情况下。
- 不试图将自己的低效归咎于环境,这是对心态最大的挑战。
建立规则的小教程:
- 确定吃饭、睡觉的时间。相信我,睡觉是生活中最大的一块,睡觉和吃饭的时间确定了,你的时间天然地就被分割为了早上/下午/晚上三块。
- 安排工作时间。
- 计算自己完成任务所需工时。
- 保证有20%的工作时间为弹性时间,这些时间可以保证你的计划都能按时完成。
BigInteger类
- BigInteger类概述
- 可以让超过Integer范围内的数据进行运算
- 构造方法
- public BigInteger(String val)
这个类就很好理解了,首先我们要了解Integer的范围是多少?
public class BigIntegerDemo {public static void main(String[] args) {//我们先来输出Integer的最大最小值System.out.println(Integer.MAX_VALUE);//2147483647System.out.println(Integer.MIN_VALUE);//-2147483648//可以看到Integer的范围,如果我们超过Integer的范围,就要用BigInteger了//假如我们用Integer来创建一个超出它的范围的一个对象,那么肯定是报错的// Integer iii = new Integer("2147483648");// NumberFormatException// System.out.println(iii);// 所以通过大整数来创建对象BigInteger bi = new BigInteger("2147483648");System.out.println("BigInteger :" + bi);//BigInteger :2147483648}
}
- BigInteger类成员方法
- public BigInteger add(BigInteger val):加
- public BigInteger subtract(BigInteger val):减
- public BigInteger multiply(BigInteger val):乘
- public BigInteger divide(BigInteger val):除
- public BigInteger[] divideAndRemainder(BigInteger val):返回商和余数的数组
public class BigIntegerDemo {public static void main(String[] args) {//首先创建两个对象,然后我们来验证加减乘除的成员方法BigInteger bi1 = new BigInteger("100");BigInteger bi2 = new BigInteger("50");//加System.out.println("add:" + bi1.add(bi2));//add:150//减System.out.println("subtract:" + bi1.subtract(bi2));//subtract:50//乘System.out.println("multiply:" + bi1.multiply(bi2));//multiply:5000//除System.out.println("divide:" + bi1.divide(bi2));//divide:2BigInteger[] bis = bi1.divideAndRemainder(bi2);System.out.println("商:" + bis[0]);//商:2System.out.println("余数:" + bis[1]);//余数:0}
}
学完了BigInteger类是不是觉得挺简单的,下面我们继续学BigDecimal类
BigDecimal类
看到了这个类,肯定有人都不知道它是用来干什么的,我来给大家解释一下
由于在运算的时候,float类型和double很容易丢失精度。所以,为了能精确的表示、计算浮点数,Java提供了BigDecimal类
- BigDecimal类概述
- 不可变的、任意精度的有符号十进制数。
- 构造方法
- public BigDecimal(String val)
public class BigDecimalDemo {//下面这些输出结果你能看出他们的结果吗?在看看下面的输出结果是不是和你想的一样呢?public static void main(String[] args) {System.out.println(0.09 + 0.01);System.out.println(1.0 - 0.32);System.out.println(1.015 * 100);System.out.println(1.301 / 100);System.out.println(1.0 - 0.12);}
}
输出结果:
看到结果后,只想说一句次哦!那么我来给大家解释下这是为什么?
这是因为float类型的数据存储和整数不一样导致的。 它们大部分的时候,都是带有有效数字位。
float类型和double很容易丢失精度,所以我们试试Java为我们提供的BigDecimal类
- BigDecimal类成员方法
- public BigDecimal add(BigDecimal augend):加
- public BigDecimal subtract(BigDecimal subtrahend):减
- public BigDecimal multiply(BigDecimal multiplicand):乘
- public BigDecimal divide(BigDecimal divisor):除
- public BigDecimal divide(BigDecimal divisor,int scale,
int roundingMode):商,保留几位小数
public class BigDecimalDemo {public static void main(String[] args) {BigDecimal bd1 = new BigDecimal("0.09");BigDecimal bd2 = new BigDecimal("0.01");System.out.println("add:" + bd1.add(bd2));BigDecimal bd3 = new BigDecimal("1.0");BigDecimal bd4 = new BigDecimal("0.32");System.out.println("subtract:" + bd3.subtract(bd4));BigDecimal bd5 = new BigDecimal("1.015");BigDecimal bd6 = new BigDecimal("100");System.out.println("multiply:" + bd5.multiply(bd6));BigDecimal bd7 = new BigDecimal("1.301");BigDecimal bd8 = new BigDecimal("100");System.out.println("divide:" + bd7.divide(bd8));System.out.println("divide:"+ bd7.divide(bd8, 3, BigDecimal.ROUND_HALF_UP));System.out.println("divide:"+ bd7.divide(bd8, 8, BigDecimal.ROUND_HALF_UP));}
}
输出结果:
如果你仔细看结果你会发现,除法最后保留几位小数,还有为什么要用BigDecimal.ROUND_HALF_UP,我来再给大家讲讲除法的详细说明
下面我们来看看除法的详细说明:
- divide(BigDecimal divisor, int scale, introundingMode)
BigDecimal的setScale方法 :BigDecimal.setScale() 方法用于格式化小数点 ,表示保留一位小数,默认用四舍五入方式
- 直接删除多余的小数位,如2.35会变成2.3 setScale(1,BigDecimal.ROUND_DOWN)
- 进位处理,2.35变成2.4 setScale(1,BigDecimal.ROUND_UP)
- 四舍五入,2.35变成2.4 setScale(1,BigDecimal.ROUND_HALF_UP)
- 四舍五入,2.35变成2.3,如果是5则向下舍setScaler(1,BigDecimal.ROUND_HALF_DOWN)
- BigDecimal枚举常量用法摘要 :
- CEILING 向正无限大方向舍入的舍入模式。
- DOWN 向零方向舍入的舍入模式。
- FLOOR 向负无限大方向舍入的舍入模式。
- HALF_DOWN 向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向下舍入。
- HALF_EVEN 向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
- HALF_UP 向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向上舍入。
- UNNECESSARY 用于断言请求的操作具有精确结果的舍入模式,因此不需要舍入。
- UP 远离零方向舍入的舍入模式。
Date类
- Date类概述
- 类 Date 表示特定的瞬间,精确到毫秒。
- 构造方法
- public Date():根据当前的默认毫秒值创建日期对象
- public Date(long date):根据给定的毫秒值创建日期对象
public class DateDemo {public static void main(String[] args) {// 创建对象Date d = new Date();System.out.println("d:" + d)//long time = System.currentTimeMillis();//获取当前的时间// 创建对象long time = 1000 * 60 * 60; // 1小时Date d2 = new Date(time);System.out.println("d2:" + d2);}
}
输出结果:
- 成员方法
- public long getTime():获取时间,以毫秒为单位(从Date得到一个毫秒值)
- public void setTime(long time):设置时间(把一个毫秒值转换为Date)
public class DateDemo {public static void main(String[] args) {// 创建对象Date d = new Date();// 获取时间long time = d.getTime();System.out.println(time);System.out.println(System.currentTimeMillis());//运行结果可以发现,上面的结果是相同的// 设置时间d.setTime(1000);System.out.println("d:" + d);}
}
输出结果:
我们发现得到的日期不是我们平时看到的,是国外的英文和数字组合,这样让我们读起来就很不爽了,那么,我们有办法让它变成中国式的年月日时分秒类型的吗?答案是肯定可以的。java为我们提供了DateFormat类,下面我们来进行学习
DateFormat类
- DateFormat类概述
- DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。
- 是抽象类,所以使用其子类SimpleDateFormat
SimpleDateFormat构造方法
- public SimpleDateFormat():默认模式
- public SimpleDateFormat(String pattern):给定的模式
给定模式字符串该如何写呢?我们可以去看API找到对应的模式
- 年 y
- 月 M
- 日 d
- 时 H
- 分 m
- 秒 s
所以一般我们要这样书写”yyyy年MM月dd日 HH:mm:ss”
就会得到相应的日期:比如 2016年08月17日 23:05:16
成员方法
- public final String format(Date date):Date – String(格式化)
- public Date parse(String source):String – Date(解析)
public class DateFormatDemo {public static void main(String[] args) throws ParseException {// Date -- String// 创建日期对象Date d = new Date();// 创建格式化对象 // SimpleDateFormat sdf = new SimpleDateFormat();// 给定模式SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");// Date -- String(格式化)String s = sdf.format(d);System.out.println(s);//String -- Date(解析)String str = "2016-08-08 12:12:12";//在把一个字符串解析为日期的时候,请注意格式必须和给定的字符串格式匹配SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date dd = sdf2.parse(str);System.out.println(dd);} }
输出结果:
我们来做一道不可思议的练习题,算一下你来到这个世界多少天?
纳尼,多少天,真不敢去想象啊!还是算一下吧。public class MyYearOldDemo {public static void main(String[] args) throws ParseException {// 键盘录入你的出生的年月日,注意和下面的格式相同yyyy-MM-ddScanner sc = new Scanner(System.in);System.out.println("请输入你的出生年月日:");String line = sc.nextLine();// 把该字符串转换为一个日期SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date d = sdf.parse(line);// 通过该日期得到一个毫秒值long myTime = d.getTime();// 获取当前时间的毫秒值long nowTime = System.currentTimeMillis();// 用nowTime - myTime 得到一个毫秒值long time = nowTime - myTime;// 把time 的毫秒值转换为年long day = time / 1000 / 60 / 60 / 24;System.out.println("你来到这个世界:" + day + "天");} }
以我的出生年月日为例,输出结果
8000多天,真的是老了Calendar类
- Calendar类概述
- Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
- 成员方法
- public static Calendar getInstance()
- public int get(int field):返回给定日历字段的值。日历类中的每个日历字段都是静态的成员变量,并且是int类型。
- public void add(int field,int amount):根据给定的日历字段和对应的时间,来对当前的日历进行操作。
- public final void set(int year,int month,int date):设置当前日历的年月日
public class CalendarDemo {public static void main(String[] args) {// 其日历字段已由当前日期和时间初始化:Calendar rightNow = Calendar.getInstance(); // 子类对象// 获取年int year = rightNow.get(Calendar.YEAR);// 获取月int month = rightNow.get(Calendar.MONTH);// 获取日int date = rightNow.get(Calendar.DATE);System.out.println(year + "年" + (month + 1) + "月" + date + "日");// 5年后的10天前c.add(Calendar.YEAR, 5);c.add(Calendar.DATE, -10);// 获取年year = c.get(Calendar.YEAR);// 获取月month = c.get(Calendar.MONTH);// 获取日date = c.get(Calendar.DATE);System.out.println(year + "年" + (month + 1) + "月" + date + "日");c.set(2011, 11, 11);// 获取年year = c.get(Calendar.YEAR);// 获取月month = c.get(Calendar.MONTH);// 获取日date = c.get(Calendar.DATE);System.out.println(year + "年" + (month + 1) + "月" + date + "日");} }
输出结果:
到这里呢!我们的java中的常用类就学完了,不知道你掌握的怎么样呢?有时间多练习一下吧。我们下次开始学习集合。
欢迎有兴趣的同学加我朋友的QQ群:点击直接加群555974449 请备注:java基础再回首
我在群里等你。- Calendar类概述
JAVA基础再回首(十三)——BigInteger类、BigDecimal类、Date类、DateFormat类、Calendar类相关推荐
- JAVA基础再回首(三十)——JAVA基础再回首完美结束,感概万千!
JAVA基础再回首(三十)--JAVA基础再回首完美结束,感概万千! 经过了几个月断断续续的回首java基础,终于回首完了,这一路走来体会到了枯燥.乏味.有趣,当然更多是收获,和第一遍学java基础的 ...
- JAVA基础再回首(一)——基本概念、JAVA开发工具、JAVA基本语法
JAVA基础再回首(一)--基本概念.JAVA开发工具.JAVA基本语法 学了java,做了android应用开发,现在回想起来,真的是一路坎坷..我在上章博客中提到了我以后的几个学习计划和目标就是把 ...
- Java基础再回首之设计模式系列①-----StrategyPattern 策略者模式(案列教程,附带demo)
一.前言 自己学java学的也熟悉了.踏入工作的不归路之后,身为一个Android开发工程师,不仅要Java基础扎实,还要对其的设计模式有所掌握,最近在群听到<Head First>这本书 ...
- java -Date、DateFormat、Calendar类
Date类概述 类 Date 表示特定的瞬间,精确到毫秒. 毫秒概念:1000毫秒=1秒 毫秒的0点: System.currentTimeMillis() 相当于Date d = new Date ...
- Java学习 day12 (常用API2)Object、Date、DateFormat、Calendar、System、StringBuilder、包装类
前言: 在java中,API是指一些预先定义的函数,直接导入API就可以快速使用已经编写好的代码和与之对应的功能,之前我们也进行了一些常用API的学习,比如String类.Arrays类.Math类, ...
- Java番外篇4——BigInteger与BigDecimal
Java番外篇4--BigInteger与BigDecimal 为了解决大数运算的问题 操作整型:BigInteger 操作小数:BigDecimal 1.BigInteger 方法声明 功能介绍 p ...
- Android基础再回首——四大组件之Activity、Service俩兄弟
Android基础再回首--四大组件之Activity.Service俩兄弟 偶尔的回首过去,总是有不一样的收获.今天就来回顾下Activity和service吧,不用嫌弃太基础了,打好基础是取得成功 ...
- Date、DateFormat、Calendar日期类
目录: 1.Date 2.DateFormat 3.Calendar 1.Date (1)所在位置 java.util.Date; (2)两种创建对象的方法: 如果调用空参构造创建对象那么对象为当前的 ...
- Java日期相关类:Date、SimpleDateFormat和Calendar类常用API代码示例
Date: 表示特定的瞬间,精确到毫秒,他可以通过方法来设定自己所表示的时间,可以表示任意的时间 Date类的构造方法 Date() :创建的是一个表示当前系统时间的Date对象 Date(long ...
最新文章
- 贪心 ---- C. Anu Has a Function位运算+贪心证明
- 互联网公司面试官是如何360°无死角考察候选人的?(下篇)
- 【音视频架构演进:边缘计算与云原生】
- LeetCode 16 3Sum Closest(最接近的3个数的和)
- QT高级编程之基本函数用法
- 数据科学 IPython 笔记本 7.11 聚合和分组
- 【实例解析】大型服装集团BI决策系统的分析主题模块
- Python_study_day_1_while_if
- java基础---线程
- Kotlin与Android能做什么?答:Android开发优先语言
- 移动前端UI库—Frozen UI、WeUI、SUI Mobile,jQuery WeUI,vue-carbon,VUE.YDUI,Muse-UI
- foxpro mysql_Foxpro数据库命令汇总
- Dzzoffice 部署
- 实验2 格式化输入输出和分支语句
- 判断用户是否已关注公众号
- 拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
- 用USART来替代SPI,效果非常不错
- oracle 数据库如何建立索引 如何用索引?
- MATLAB中clf函数
- java高级过滤器、baseServlet、log4j配置使用poi实现excel导入数据库
热门文章
- 在VMware中安装虚拟机Windows server 2008
- (毕业设计资料)基于51单片机红外无线遥控智能家电控制系统设计
- 常州SEO姜东:技术搜索引擎优化
- 《微积分:一元函数微分学》——罗尔定理
- 关于4K高清分辨率下,QOpenGLWidget无法完整绘制图像问题的解决
- 5G时代系列谈:(五)未来之势
- 【Pytorch-从一团乱麻到入门】:3、模型效果评估指标:ROC、AUC、precision、recall
- android x86双显卡,centos7笔记本双显卡安装nvidia驱动并成功安装cuda
- 检测QQ是否开通微信
- iOS6和iOS7环境下微信登录未显示问题微信IOS的SDK:isWXAppInstalled总是返回NO和nil...