JAVA笔记整理-Math、定时器、大数据(BigDecimal)类型
一、Math类
java.lang.Math类用于数学计算的工具类 ,它提供都是静态方法 ,不需要构造Math对象
常用方法:
Math.random():获取随机数
Math.abs() 获取绝对值
Math.ceil(): 向上取整
Math.floor() :向下取整
Math.rint():取接近它的整数 ,如果两个同样接近,往偶数靠近
Math.max(int,int):返回两个数的最大值
Math.min(int,int):返回两个数的最小值
Math.round():四舍五入整数
Math .sqrt():对一个数开平方
Math.pow(double,double),对一个数的几次幂
public static void main(String[] args) {
System.out.println(Math.PI);
System.out.println(Math.E);
System.out.println(" 一个数的绝对值:"+Math.abs(-100));//100
System.out.println(" 向上取整:"+Math.ceil(13.5)); // 14
System.out.println(" 向上取整(比它大的最近数):"+Math.ceil(-13.5));// -13
System.out.println("向下取整:"+ Math.floor(13.5));// 13
System.out.println("向下取整"+Math.floor(-20.2));// -21
//四舍五入
System.out.println(Math.round(23.4));// 23
System.out.println(Math.round(-23.5));//-23
System.out.println(Math.round(-24.5));//-24
System.out.println(Math.rint(23.4));// 23
System.out.println(Math.rint(23.5));//24 如果两个一样接近,取接近偶数
System.out.println(Math.rint(22.5));//22
System.out.println(Math.rint(0.6));//0
}
二、定时器类(Timer类)
1、Timer类
java.util.Timer类 是一个任务调度的定时器类,可以安排任务一次执行,或定期重复执行
创建Timer对象
Timer timer = new Timer();
Timer timer = new Timer(name);
常用方法
timer.schedule(TimerTask,2000); 2秒后执行一次任务
timer.schedule(TimerTask,2000,1000); 2秒后开始执行任务,每1s执行一次
2、TimerTask类
java.util.TimerTask类是由定时器执行的任务类,是一个抽象类。
import java.util.Timer;
import java.util.TimerTask;
public class TestTimer {
//统计打印次数
static int count=0;
// 创建一个定时器类
static Timer timer = new Timer("我的定时器");
public static void main(String[] args) {
// 开始定时一个任务
TestTimer obj = new TestTimer();
// 多少毫秒之和 执行一次任务
// timer.schedule(obj.new MyTask(),2000);
// 2秒之后开始执行,每隔1s执行一次
timer.schedule(obj.new MyTask(),2000,1000);
}
// 定义内部类时,可以直接使用外部类的属性 和它的对象
class MyTask extends TimerTask{
@Override
public void run() {
System.out.println("你好!!!");
count++;
if(count>=10){
System.out.println("停止");
//停止
timer.cancel();
}
}
}
}
三、大数据类型BigDecimal
1、BigDecimal类
两个double类型的计算可能导致精度不准确,这里使用
java.math.*里面提供了BigDecimal类(提供高精度计算的方法)
public static void main(String[] args) {
double a= 1.200000;
double b= 1.35433;
double c = a+b;
System.out.println(c);
System.out.println(0.05+0.01);
System.out.println(1.0-0.42); // 会出现精度问题 计算不准确
// 使用BigDecimal ,先将类型转成字符串 (为了避免精度问题)
BigDecimal num1 = new BigDecimal("0.051");
BigDecimal num2 = new BigDecimal("0.012");
// 两个数相加
BigDecimal sum = num1.add(num2 ) ;
// 设置保留2位整数 四舍五入
sum =sum.setScale(2,BigDecimal.ROUND_HALF_UP);
System.out.println(sum);
// 减法
sum = num1.subtract(num2);
System.out.println(sum);
// 乘法
sum = num1.multiply(num2);
System.out.println(sum);
// 除法
sum = num1.divide(num2,2,BigDecimal.ROUND_HALF_UP);
System.out.println(sum);
}
2、NumberFormat类
java.text.NumberFormat类 :用于将数值格式转成指定格式并输出字符串形式的类 。
DecimalFormat类: 属于NumberFormat的子类。
// NumberFormat类是对数值类型的格式化类,其中 DecimalFormat是继承NumberFormat
// 获取数值的货币表现形式
NumberFormat nf = NumberFormat.getCurrencyInstance();
String s1 = nf.format(23424.2);
System.out.println(s1);
//获取数值的百分比
nf = NumberFormat.getPercentInstance();
s1= nf.format(0.654);
System.out.println(s1);
//根据指定的格式匹配百分比
nf = new DecimalFormat("##.##%");
s1=nf.format(0.654);
System.out.println(s1);
// 根据指定的模式匹配千分比
nf = new DecimalFormat("##.##\u2030");
s1 = nf.format(0.6543);
System.out.println(s1);
// 根据指定的模式 转成科学计数法
nf = new DecimalFormat("#.###E0");
s1 = nf.format(198200);
System.out.println(s1);
// 根据指定的模式 将字符串转成 指定格式数值型
String s2 ="25.3%";
nf = new DecimalFormat("##.##%");
Number dd = nf.parse(s2);
double num = (double)dd;
System.out.println("这个字符串转成double:"+num);