12--API-SimpleDateFormat--BigDecimal/BigInteger类
日期工具类SimpleDateFormat
1概念
用来把Date
类型和String
类型的数据进行转换.
SimpleDateFormat
使得可以选择任何用户定义的日期-时间格式的模式。
2创建对象
new SimpleDateFormat(String parm);
parm为一个字符串,表示格式.
时间模式
字母 | 时间元素 | 表示 | 示例 |
---|---|---|---|
y |
年 | Year | 1996 ; 96 |
M |
年中的月份 | Month | July; Jul; 07 |
D |
年中的天数 | Number | 200 |
d |
月份中的天数 | Number | 31;30;28;29 |
H |
一天中的小时(24小时制) | Number | 23 |
h |
天中的小时(12小时制) | Number | 11 |
m |
分钟数 | Number | 60 |
s |
分钟中的秒数 | Number | 60 |
S |
毫秒数 | Number | 1000 |
3常见方法
方法名 | 功能 |
---|---|
format(Date) | 把Date格式化成字符串 |
parse(String) | 把String解析成Date |
4 测试案例
package cn.tedu.number;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
//这个类用来测试 存活天数
public class Test3_SDformat {
public static void main(String[] args) throws Exception {
// 1、接收用户输入的出生日期(String类型)
String birthday = new Scanner(System.in).nextLine() ;
// 2、把String类型的日期 转成 Date类型(需要工具类SimpleDateFormat)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(birthday) ;
// 3、获取出生时的毫秒值(getTime)
long birth = date.getTime() ;
// 4、获取当前的毫秒值
long now = System.currentTimeMillis() ;
// 5、输出时间差(换算成天。ms)
System.out.println( (now-birth)/1000/60/60/24 ) ;
}
}
BigDecimal/BigInteger类
1 概述
--1、在java运算中,浮点数运算会不精确。解决方案就是BigDecimal。
--2、在java运算中,可能会有超大整数运算,超出了long范围。解决方案就是BigInteger。
2 创建对象
BigDecimal(double val)
BigDecimal(String val) //建议使用 String类型 的构造方法
3 常用方法
BigDecimal add(BigDecimal augend) //加法运算:
BigDecimal multiply(BigDecimal multiplicand) //乘法运算:
BigDecimal subtract(BigDecimal subtrahend) //减法运算:
divide(BigDecimal bd,保留位数,舍入方式)//除不尽时使用 除法运算:
BigDecimal setScale(保留位数,舍入方式)//同上
BigDecimal pow(int n):求数据的几次幂
4 测试案例
package cn.tedu.number;
import java.math.BigDecimal;
import java.util.Scanner;
//这个类用来测试 浮点数运算
public class Test4_Double {
public static void main(String[] args) {
method();//暴露问题
method2();// 解决浮点运算不精确的现象 BigDecimal
}
public static void method2() {
// 1、接收用户输入的两个小数
double a = new Scanner(System.in).nextDouble();
double b = new Scanner(System.in).nextDouble();
//2、创建对象 -- 建议使用 String类型 的构造方法
BigDecimal bd1 = new BigDecimal(a+"");
BigDecimal bd2 = new BigDecimal(b+"");
// 3、做运算
BigDecimal bd3 ; //定义bd3保存计算结果
bd3 = bd1.add(bd2) ;//加法
System.out.println(bd3);
bd3 = bd1.subtract(bd2) ;//减法
System.out.println(bd3);
bd3 = bd1.multiply(bd2) ;//乘法
System.out.println(bd3);
// bd3 = bd1.divide(bd2) ;//除法java.lang.ArithmeticException: 除不尽
//-divide(a,b,c)--a是指要运算的对象名 ---b是指要保留几位小数 ---c是指舍入方式
try {
bd3 = bd1.divide(bd2,3,BigDecimal.ROUND_HALF_UP) ;//除法
System.out.println(bd3);
} catch (Exception e) {
System.out.println("除数不能为0");
}
}
public static void method() {
// 1、接收用户输入的两个小数
double a = new Scanner(System.in).nextDouble();
double b = new Scanner(System.in).nextDouble();
// 2、做运算
System.out.println(a + b);// 不精确
System.out.println(a - b);// 不精确
System.out.println(a * b);// 不精确
System.out.println(a / b);// 不精确
}
}