程序开发的本质就是数据处理,Java提供有java.lang.Math类来帮助开发者进行常规的数学计算处理,例如,四舍五入、三角函数、乘方处理等。
范例:使用Math类进行数学计算
package cn.kuiba.util;
public class Main {
public static void main(String[] args) throws Exception {
System.out.println(Math.abs(-10.1)); //绝对值
System.out.println(Math.max(10.2,20.3)); //获取最大值
System.out.println(Math.log(5)); //对数
System.out.println(Math.round(15.1)); //四舍五入
System.out.println(Math.round(-15.5));
System.out.println(Math.round(-15.51));
System.out.println(Math.pow(10.2,20.2)); //乘方
}
}
程序执行结果:
10.1
20.3
1.6094379124341003
15
-15
-16
2.364413713591828E20
范例:自定义四舍五入工具类
package cn.kuiba.util;
class MathUtil{
private MathUtil(){}; //构造方法私有化
/**
* 进行准确位数的四舍五入处理操作
* @param num 要进行四舍五入计算的数字
* @param scale 保留的小数位
* @return 四舍五入处理后的结果
*/
public static double round(double num,int scale){
return Math.round(num*Math.pow(10.0,scale))/Math.pow(10.0,scale);
}
}
public class Main {
public static void main(String[] args) throws Exception {
System.out.println(MathUtil.round(7.45124789023480234890,3));
}
}
程序执行结果:
7.451
9. Random随机数
java.util.Random类的主要功能是可以进行随机数的生成,开发者只需要为其设置一个随机数的范围边界就可以随机生成不大于此边界的正整数,生成方法如下。
随机生成正整数:public int nextInt(int bound)
范例:随机生成正整数
package cn.kuiba.util;
import java.util.Random;
public class Main {
public static void main(String[] args) throws Exception {
Random random=new Random();
for (int x=0;x<10;x++){
System.out.println(random.nextInt(100)+"、");
}
}
}
程序执行结果:
46、43、78、97、86、97、64、17、47、12、
随机生成了10个不大于100的正整数,并且也会有可能生成重复数字。
范例:实现36选7
从1~36个数字中,随机抽取7个数字内容,并且这7个数字内容不能为0,也不能重复。
package cn.kuiba.util;
import java.util.Random;
public class Main {
public static void main(String[] args) throws Exception {
int data[]=new int[7]; //开辟7个大小的空间
Random random=new Random();
int foot=0; //操作data脚标
while (foot<7){ //选择7个数字
int num=random.nextInt(37); //生成1个数字
if (isUse(num,data)){ //该数字现在可以使用
data[foot++]=num; //保存数据
}
}
java.util.Arrays.sort(data); //数组排序
printArray(data); //输出数组内容
}
/**
* 将接收到的整形数组内容进行输出
* @param temp 数组临时变量
*/
public static void printArray(int temp[]){
for (int x=0;x<temp.length;x++){ //for循环输出
System.out.print(temp[x]+"、"); //下标获取元素内容
}
}
/**
* 判断传入的数字是否为0以及是否在数组中存在
* @param num 要判断的数字
* @param temp 已经存在的数据
* @return 如果该数字不是0并且可以使用返回true,否则返回false
*/
public static boolean isUse(int num,int temp[]){
if (num==0){ //生成数字为0表示错误
return false;
}
for (int x=0;x<temp.length;x++){
if (num==temp[x]){ //生成数字已存在表示错误
return false;
}
}
return true;
}
}
程序执行结果:
1、2、7、9、22、25、36、
本程序为了防止保存错误的随机数,所以定义了一个isUse()方法进行0和重复内容的判断。由于Random类生成的随机数没有顺序,所以利用了Array.sort()实现了数组排序。
10. 大数字处理类
当一个数学非常大的时候,是无法使用基本数据类型接收的。在java.math包中提供了大数字的操作类:BigInteger(整数)、BigDecimal(浮点数),这两类都是Number子类。继承结构如图,常用方法如表。
范例:使用BigInteger实现四则运算
package cn.kuiba.util;
import java.math.BigInteger;
public class Main {
public static void main(String[] args) throws Exception {
BigInteger bigA=new BigInteger("6789321987");
BigInteger bigB=new BigInteger("13972");
System.out.println("加法操作:"+bigA.add(bigB));
System.out.println("减法操作:"+bigA.subtract(bigB));
System.out.println("乘法操作:"+bigA.multiply(bigB));
System.out.println("除法操作:"+bigA.divide(bigB));
BigInteger result[]=bigA.divideAndRemainder(bigB);
System.out.println("商:"+result[0]+"、余数:"+result[1]);
}
}
程序执行结果:
加法操作:6789335959
减法操作:6789308015
乘法操作:94860406802364
除法操作:485923
商:485923、余数:5831
范例:使用BigDecimal实现四舍五入
package cn.kuiba.util;
import java.math.BigDecimal;
import java.math.RoundingMode;
class MathUtil{
private MathUtil(){}
/**
* 实现数据的四舍五入操作
* @param num 要进行四舍五入操作的数字
* @param scale 四舍五入保留的小数位数
* @return 四舍五入处理后的结果
*/
public static double round(double num,int scale){
//数字除以1.0还是数字本身,divide()方法保留指定位数的小数,并设置进位模式为向上进位(HALF_UP)
return new BigDecimal(num).divide(new BigDecimal(1.0),scale,RoundingMode.HALF_UP).doubleValue();
}
}
public class Main {
public static void main(String[] args) throws Exception {
System.out.println(MathUtil.round(19.6352,2));
}
}
程序执行结果:
19.64
本程序主要利用了BigDecimal类的divide()除法操作实现了准确的小数位保留,同时利用向上进位模式实现了四舍五入操作。
11. Date日期处理类
Java中如果想要获得当前的日期时间可以通过java.util.Date类来实现,常用方法如下:
范例:获取当前日期时间
package cn.kuiba.util;
import java.util.Date;
public class Main {
public static void main(String[] args) throws Exception {
Date date=new Date();
System.out.println(date);
}
}
程序执行结果:
Wed May 11 17:44:19 CST 2022
范例:Date与long之间转换处理
package cn.kuiba.util;
import java.util.Date;
public class Main {
public static void main(String[] args) throws Exception { //简化异常处理
Date date=new Date(); //实例化Date类对象
long current=date.getTime(); //获得当前时间戳数字
current+=864000*1000; //10天的秒数
System.out.println(new Date(current)); //long转换为Date
}
}
程序执行结果:
Sat May 21 17:46:24 CST 2022
Date类对象保存时间戳是以毫秒的形式记录的,本程序获取了10天之后的日期。
提示:JDK1.8开始提供有java.time.LocalDateTime类,提供有java.time支持包,可直接进行日期时间操作。
package cn.kuiba.util;
import java.time.LocalDateTime;
public class Main {
public static void main(String[] args) throws Exception {
LocalDateTime localDateTime=LocalDateTime.now();
System.out.println(localDateTime);
}
}
程序执行结果:
2022-05-11T17:51:17.005
可以方便的获取日期时间数据,而后也可以方便的进行日期时间的累加。
12. SimpleDateFormat日期格式化
使用java.util.Date类可以获取当前日期,但是结果不方便阅读,那么考虑对结果进行格式化处理,通过java.text.SimpleDateFormat类完成。继承关系如图。
常用方法如表。
在日期格式化操作中必须设置有完整的日期转化模板,模板中通过特定的日期标记可以将一个日期格式中的日期数字提取出来。模板如表。
范例:将日期格式化为字符串
package cn.kuiba.util;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) throws Exception {
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
String str=sdf.format(date);
System.out.println(str);
}
}
程序执行结果:
2022-05-11 18:14:08.798
范例:将字符串转为Date对象
package cn.kuiba.util;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) throws Exception {
String birthday="2001-01-14 12:46:05.542";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date date=sdf.parse(birthday);
System.out.println(date);
}
}
程序执行结果:
Sun Jan 14 12:46:05 CST 2001