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);


posted @ 2020-10-25 18:53  落雨♡̶初晴  阅读(121)  评论(0编辑  收藏  举报