Math类

Java语言是彻底地面向对象语言,哪怕是进行数学运算也封装到一个类中,这个类是java.lang.Math类,Math类是final的,不能被继承。

Math类中包含用于进行基本数学运算的方法,如指数、对数、平方根和三角函数等。

  1. 舍入方法
  2. 最大值和最小值
  3. 绝对值
  4. 三角函数
  5. 对数运算
  6. 平方根
  7. 幂运算
  8. 计算随机值
  9. 常量

示例代码如下:

package java2023_01_05;

public class MathOperation {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		double[] nums = { 1.4, 1.5, 1.6 };
		// 测试最大值和最小值
		System.out.printf("max(%.1f , %.1f)=%.1f\n", nums[1], nums[2], Math.max(nums[1], nums[2]));
		System.out.printf("min(%.1f , %.1f)=%.1f\n", nums[1], nums[2], Math.min(nums[1], nums[2]));
		System.out.println();

		// 测试三角函数
		// 1π弧度=180°
		System.out.printf("toDegrees(0.5π) = %f\n", Math.toDegrees(0.5 * Math.PI)); // 度数
		System.out.printf("toRadians(180/π) = %f\n", Math.toRadians(180 / Math.PI)); // 弧度
		System.out.println();

		// 测试平方根
		System.out.printf("sqrt(%.1f) = %f\n", nums[2], Math.sqrt(nums[2]));
		System.out.println();

		// 测试幂运算
		System.out.printf("pow(8,3)=%f\n", Math.pow(8, 3));
		System.out.println();

		// 测试计算随机值
		System.out.printf("0.0~1.0的随机数 = %f\n", Math.random());
		System.out.println();

		// 测试舍入
		for (double d : nums) {
			Display(d);
		}
	}

	private static void Display(double n) {
		// TODO Auto-generated method stub
		System.out.printf("ceil(%.1f)=%.1f\n", n, Math.ceil(n));
		System.out.printf("floor(%.1f)=%.1f\n", n, Math.floor(n));
		System.out.printf("round(%.1f)=%d\n", n, Math.round(n));
		System.out.println();
	}
}

运行结果如下:

Java常用类(重要 · 下篇)_Calendar类

大数值

对货币等大值数据进行计算时,int,long,double等基本数据类型已经在精度方面不能满足需求了,为此,Java提供了两个大数值类:BigInteger和BigDecimal,这两个类都继承自Number抽象类。

BigInteger类

java.math.BigInteger是不可变的任意精度的大整数。

示例代码如下:

package java2023_01_05;

import java.math.BigInteger;

public class MathInteger {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 创建BigInteger,字符串表示十进制数值
		BigInteger n1 = new BigInteger("999999999999");
		// 创建BigInteger,字符串表示十六进制数值
		BigInteger n2 = new BigInteger("567800000", 16);
		// 加法操作
		System.out.println("加法操作:" + n1.add(n2));
		// 减法操作
		System.out.println("减法操作:" + n1.subtract(n2));
		// 乘法操作
		System.out.println("乘法操作:" + n1.multiply(n2));
		// 除法操作
		System.out.println("除法操作:" + n1.divide(n2));
	}
}

Java常用类(重要 · 下篇)_Calendar类_02

BigDecimal类

java.math.BigDecimal是不可变的任意精度的有符号十进制数。

示例代码如下:

package java2023_01_05;

import java.math.BigDecimal;

public class MathDecimal {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 创建BigDecimal,通过字符串参数创建
		BigDecimal n1 = new BigDecimal("999999999.99988888");
		// 创建BigDecimal,通过double参数创建
		BigDecimal n2 = new BigDecimal(567800000.888888);
		// 加法操作
		System.out.println("加法操作:" + n1.add(n2));
		// 减法操作
		System.out.println("减法操作:" + n1.subtract(n2));
		// 乘法操作
		System.out.println("乘法操作:" + n1.multiply(n2));
		// 除法操作
		System.out.println("除法操作:" + n1.divide(n2, BigDecimal.ROUND_HALF_UP));
	}

}

Java常用类(重要 · 下篇)_大数值_03

日期和时间相关类

Java中最常用的日期和时间类是java.util.Date,与日期和时间相关类还有DateFormate,Calendar和TimeZone。

  • DateFormate用于日期格式化。
  • Calendar是日历类。
  • TimeZone是时区类。

Date类

Date类中有许多构造方法和普通方法。

示例代码:

package java2023_01_05;

import java.util.Date;

public class DateDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Date now = new Date();
		System.out.println("now = " + now); // 当前时间
		System.out.println("now.getTime()=" + now.getTime()); // 毫秒数
		System.out.println();

		Date date = new Date(1234567890123L); // 指定标准基准时间以来的毫秒数创建Date对象
		System.out.println("date=" + date);
		System.out.println();

		display(now, date);
		date.setTime(9999999999999L); // 重新设置日期
		System.out.println("修改之后的date:" + date);
		display(now, date);
	}

	private static void display(Date now, Date date) {
		// TODO Auto-generated method stub
		// 参数after、before、compareTo方法
		System.out.println(now.after(date));
		System.out.println(now.before(date));
		System.out.println(now.compareTo(date));
	}

}

Java常用类(重要 · 下篇)_大数值_04

日期格式化和解析

示例代码如下:

public static void main(String[] args) throws ParseException {
		// TODO Auto-generated method stub
		Date date = new Date(1234567890123L);
		System.out.println("格式化前:" + date);
		DateFormat df = new SimpleDateFormat();
		System.out.println("格式化后:" + df.format(date));
		df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		System.out.println("格式化后:" + df.format(date));

		String dateString = "2023-12-11 08:18:35";
		Date date2 = df.parse(dateString);
		System.out.println("从字符串获得的日期对象:" + date2);
}

Java常用类(重要 · 下篇)_java_05

并不是所有的字符串都能够转换为日期,如果转换失败,parse方法会抛出异常ParseException。

Calendar类

public static void main(String[] args) throws ParseException {
		// 获得默认的日历对象
		Calendar calendar = Calendar.getInstance();
		calendar.set(2018, 7, 17);
		Date date = calendar.getTime();
		System.out.println("格式化前date:" + date);
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		System.out.println("格式化后date:" + df.format(date));
		System.out.println();

		calendar.clear();

		// 设置日期
		calendar.set(Calendar.YEAR, 2018);
		calendar.set(Calendar.MONTH, 7);
		calendar.set(Calendar.DATE, 17);
		// 通过日历获得Date对象
		date = calendar.getTime();
		System.out.println("格式化前date:" + date);
		System.out.println("格式化后date:" + df.format(date));
  }

运行结果如下:

Java常用类(重要 · 下篇)_大数值_06

真正的优秀不是别人逼出来的,而是自己和自己死磕。

努力是人生最好的信仰,奋斗过才不会有遗憾。