Java基础知识回顾-18(Math类,Arrays类和大数据运算)

public class MathDemo {

    public static void main(String[] args) {
        double x=12.2;
        //取绝对值
        System.out.println(Math.abs(-99));
        //向上取整
        System.out.println(Math.ceil(x));
        //向下取整
        System.out.println(Math.floor(x));
        //取最大值
        System.out.println(Math.max(2,5));
        //取最小值
        System.out.println(Math.min(2,5));
        //取次幂
        System.out.println(Math.pow(2,3));
        //取随机数[0,1)
        System.out.println(Math.random());
        //四舍五入
        System.out.println(Math.round(12.6));
        System.out.println(Math.round(12.5));
        System.out.println(Math.round(12.4));
        //π
        System.out.println(Math.PI);
    }
import java.util.Arrays;

public class ArraysDemo {
    public static void main(String[] args) {
        method2();
    }
    public static void method1(){
        int[] arr={3,6,9,11,15};
        //返回有序数组中,指定值所对应的索引值。
        //指定值如果不存在,索引值=(-当前索引-1)
        int i=Arrays.binarySearch(arr, 6);
        System.out.println(i);
    }

    public static void method2(){
        //将数组升序排列
        int[] arr={5,7,1,6,3,2,9};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
        for(int a:arr){
            System.out.print(a+" ");
        }
    }
}
import java.math.BigInteger;

public class BigDemo {

    public static void main(String[]args){
        BigInteger b1=new BigInteger("10000000000000000000000000000000000");
        BigInteger b2=new BigInteger("20000000000000000000000000000000000");
        //加法
        System.out.println(b1.add(b2));
        //减法
        System.out.println(b1.subtract(b2));
        //乘法
        System.out.println(b1.multiply(b2));
        //除法
        System.out.println(b1.divide(b2));

    }
}
import java.math.BigDecimal;

public class BigDecimalDemo {

	public static void main(String[] args) {
		 method1();
		 method2();
		 method3();
		 method4();

	}
	public static void method1(){
		//为避免损失精度用BigDecimal计算加法
		BigDecimal bd1=new BigDecimal("0.09");
		BigDecimal bd2=new BigDecimal("0.01");
		System.out.println(bd1.add(bd2));
	}
	public static void method2(){
		//为避免损失精度用BigDecimal计算减法
		BigDecimal bd1=new BigDecimal("1.0");
		BigDecimal bd2=new BigDecimal("0.32");
		System.out.println(bd1.subtract(bd2));
	}
	public static void method3(){
		//为避免损失精度用BigDecimal计算乘法
		BigDecimal bd1=new BigDecimal("1.02");
		BigDecimal bd2=new BigDecimal("0.32");
		System.out.println(bd1.multiply(bd2));
	}
	public static void method4(){
		//为避免损失精度用BigDecimal计算除法
		BigDecimal bd1=new BigDecimal("1.0");
		BigDecimal bd2=new BigDecimal("0.3");
		System.out.println(bd1.divide(bd2,BigDecimal.ROUND_FLOOR,3));
	}

}

原文地址:https://www.cnblogs.com/zhangrui0328/p/9094069.html

时间: 2024-12-13 21:23:41

Java基础知识回顾-18(Math类,Arrays类和大数据运算)的相关文章

java基础知识回顾之java Thread类学习(六)--java多线程同步函数用的锁

1.验证同步函数使用的锁----普通方法使用的锁 思路:创建两个线程,同时操作同一个资源,还是用卖票的例子来验证.创建好两个线程t1,t2,t1线程走同步代码块操作tickets,t2,线程走同步函数封装的代码操作tickets,同步代码块中的锁我们可以指定.假设我们事先不知道同步函数用的是什么锁:如果在同步代码块中指定的某个锁(测试)和同步函数用的锁相同,就不会出现线程安全问题,如果锁不相同,就会发生线程安全问题. 看下面的代码:t1线程用的同步锁是obj,t2线程在操作同步函数的资源,假设不

java基础知识回顾之---java StringBuffer类

/*         * StringBuffer:就是字符串缓冲区,线程安全.         * 用于存储数据的容器.         * 特点:         * 1,长度的可变的.          * 2,可以存储不同类型数据.         * 3,最终要转成字符串进行使用.         * 4,可以对字符串进行修改.         *          * 构造方法:         * StringBuffer() :构造一个其中不带字符的字符串缓冲区,其初始容量为 1

java基础知识回顾之java Thread类学习(八)--java多线程通信等待唤醒机制经典应用(生产者消费者)

 *java多线程--等待唤醒机制:经典的体现"生产者和消费者模型 *对于此模型,应该明确以下几点: *1.生产者仅仅在仓库未满的时候生产,仓库满了则停止生产. *2.消费者仅仅在有产品的时候才能消费,仓空则等待. *3.当消费者发现仓储没有产品可消费的时候,会唤醒等待生产者生产. *4.生产者在生产出可以消费的产品的时候,应该通知等待的消费者去消费. 下面先介绍个简单的生产者消费者例子:本例只适用于两个线程,一个线程生产,一个线程负责消费. 生产一个资源,就得消费一个资源. 代码如下: pub

java基础知识回顾之java Thread类学习(七)--java多线程通信等待唤醒机制(wait和notify,notifyAll)

1.wait和notify,notifyAll: wait和notify,notifyAll是Object类方法,因为等待和唤醒必须是同一个锁,不可以对不同锁中的线程进行唤醒,而锁可以是任意对象,所以可以被任意对象调用的方法,定义在Object基类中. wait()方法:对此对象调用wait方法导致本线程放弃对象锁,让线程处于冻结状态,进入等待线程的线程池当中.wait是指已经进入同步锁的线程,让自己暂时让出同步锁,以便使其他正在等待此锁的线程可以进入同步锁并运行,只有其它线程调用notify方

java基础知识回顾之javaIO类--管道流PipedOutputStream和PipedIutputStream

管道流(线程通信流):管道流的主要作用是可以进行两个线程间的通讯,分为管道输出流(PipedOutputStream).管道输入流(PipedInputStream),如果想要进行管道输出,则必须要把输出流连在输入流之上.如图所示: 1.管道输入流应该连接到管道输出流 ,输入流和输出流可以直接连接       2.使用多线程操作,结合线程进行操作.通常由某个线程从管道输入流中(PipedInputStream)对象读取.          并由其他线程将其写入到相应的端到输出流中.不能使用单线程

java基础知识回顾之java Thread类学习(五)--java多线程安全问题(锁)同步的前提

这里举个例子讲解,同步synchronized在什么地方加,以及同步的前提: * 1.必须要有两个以上的线程,才需要同步. * 2.必须是多个线程使用同一个锁. * 3.必须保证同步中只能有一个线程在运行,锁加在哪一块代码 那么我们要思考的地方有:1.知道我们写的哪些是多线程代码 2.明确共享数据 3.明确多线程运行的代码中哪些语句是操作共享数据的.. 4.要确保使用同一个锁. 下面的代码:需求:两个存户分别往银行存钱,每次村100块,分三次存完. class bank{ private int

java基础知识回顾之---java String final类之intern方法

public class StringObjectDemo { /** * @param args */ public static void main(String[] args) { String hello = "Hello", lo = "lo"; System.out.print((hello == "Hello") + " ");//true System.out.print((Other.hello == hel

java基础知识回顾之---java String final类普通方法的应用之“按照字节截取字符串”

/*需求:在java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符.但对应的字节数不同,一个汉字占两个字节.定义一个方法,按照最大的字节数来取子串.如:对于“ab你好”,如果取三个字节,那么子串就是ab与“你”字的半个,那么半个就要舍弃.如果去四个字节就是“ab你”,取五个字节还是“ab你”.*/ 代码:其实是一个解码和编码的问题,要明白UTF-8码表和GBK码表的区别,UTF-8中用三个字节代表一个汉字,GBK使用2个字节代表一个汉字. 且在码表中都是用数字存放这些汉字.

java基础知识回顾之javaIO类--RandomAccessFile类

java.io 类 RandomAccessFile java.lang.Object java.io.RandomAccessFile1.该类不是IO流中的子类.2.该类既能读又能写.3.该对象内部分装了一个字节数组,通过指针可以操作数组中的元素.4.其实该对象就是将字节输入流和输出流进行了封装.5.该对象只能对文件操作,目的和源只能是文件对象.通过看构造方法可以看得出来.RandomAccessFile(File file, String mode) RandomAccessFile(Str