数字和日期处理
Table of Contents
在解决实际问题时,对数字和日期的处理是非常普遍的,如数学问题、随机数问题和日期问题等。为了解决这些问题,Java 提供了处理相关问题的类,包括 Math 类、Random 类、BigInteger 类、Date 类等。
Math 类的常用方法
在 Java 中 Math 类封装了常用的数学运算,提供了基本的数学操作,如指数、对数、平方根和三角函数等。Math 类位于 java.lang
包,它的构造方法是 private
的,因此无法创建 Math 类的对象,并且 Math 类中的所有方法都是类方法,可以直接通过类名来调用它们。
1. 静态常量
Math 类中包含 E
和 PI
两个静态常量,分别等于 e
(自然对数)和 π
(圆周率)。
2. 求最大值、最小值和绝对值
1: public class Test02 { 2: public static void main(String[] args) { 3: System.out.println("10 和 20 的较大值:" + Math.max(10, 20)); // → 20 4: System.out.println("15.6 和 15 的较小值:" + Math.min(15.6, 15)); // → 15.0 5: System.out.println("-12 的绝对值:" + Math.abs(-12)); // → 12 6: } 7: }
3. 求整运算
4. 三角函数运算
5. 指数运算
生成随机数
在 Java 中要生成一个指定范围之内的随机数字在两种方法:
- 一种是调用 Math 类的
random()
方法; - 一种是作用 Random 类。
Random 类提供了丰富的随机数生成方法,可以产生 boolean、int、long、float、byte 数组
以及 double
类型的随机数,这是它与 random()
方法最大的不同之处。 random()
方法只能产生 double 类型的 0~1
的随机数。
Random 类位于 java.util
包中,该类常用的有如两个构造方法:
Random()
:该构造方法使用一个和当前系统时间对应的数字作为种子数,然后使用这个种子数构造 Random 对象;Random(long seed)
:使用单个 long 类型的参数创建一个新的随机数生成器。
Random 类提供的所有方法生成的随机数字都是均匀分布的,也就是说区间内部的数字生成的概率是均等的。
1: import java.util.Random; 2: 3: public class Test06 { 4: public static void main(String[] args) { 5: Random r = new Random(); 6: double d1 = r.nextDouble(); // 生成[0,1.0]区间的小数 7: double d2 = r.nextDouble() * 7; // 生成[0,7.0]区间的小数 8: int i1 = r.nextInt(10); // 生成[0,10]区间的整数 9: int i2 = r.nextInt(18) - 3; // 生成[-3,15]区间的整数 10: long l1 = r.nextLong(); // 生成一个随机长整型值 11: boolean b1 = r.nextBoolean(); // 生成一个随机布尔型值 12: float f1 = r.nextFloat(); // 生成一个随机浮点型值 13: } 14: }
Math 类的 random()
方法没有参数,它默认会返回大于等于 0.0
、小于 1.0
的 double 类型随机数,对返回的数字稍加处理,即可实现产生任意范围随机数的功能。
TODO 数字格式化
时间日期的处理
在 Java 中获取当前时间,可以使用 java.util.Date
类和 java.util.Calendar
类完成。其中,Date 类主要封装了系统的日期和时间信息,Calendar 类则会根据系统的日历来解释 Date 对象。
Date 类
Date 类表示系统特定的时间戳,可以精确到毫秒。Date 对象表示时间的默认顺序是 星期、月、日、小时、分、秒、年 。
Date 类有如下两个构造方法:
Date()
:此种形式表示分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),使用该构造方法创建的对象可以获取本地的当前时间;Date(long date)
:此种形式从 GMT 时间(格林尼治时间)1970 年 1 月 1 日 0 时 0 分 0 秒开始经过参数 date 指定的毫秒数。
1: Date date1 = new Date(); // 调用无参数构造函数 2: System.out.println(date1.toString()); // 输出:Wed May 18 21:24:40 CST 2016 3: Date date2 = new Date(60000); // 调用含有一个long类型参数的构造函数 4: System.out.println(date2); // 输出:Thu Jan 0108:01:00 CST 1970
*注:GMT(格林尼治标准时间)与 CST(中央标准时间)相差 8 小时,也就是说 1970 年 1 月 1 日 00:00:00 GMT 与 1970 年 1 月 1 日 08:00:00 CST 表示的是同一时间。