天天看點

Java學習路線-18:數字操作類Math、Random、BigInteger、BigDecimal第8 章 : 數字操作類

第8 章 : 數字操作類

33 Math數學計算類

Math提供的方法都是static方法,都是基本數學公式

Math.abs(-10) // 10
Math.max(10, 1) // 10
Math.pow(10, 2) //100.0
Math.sqrt(9) //3.0
Math.round(10.4) // 10
Math.round(10.5) // 11      
class MathUtil {
    private MathUtil() {
    }

    // 自定義保留位數
    public static double round(double num, int scale) {
        return Math.round(num * Math.pow(10, scale)) / Math.pow(10, scale);
    }
}


class Demo {
    public static void main(String[] args) {
        System.out.println(MathUtil.round(10.98766, 2)); // 10.99

    }
}      

34 Random随機數生成類

import java.util.Random;

class Demo {
    public static void main(String[] args) {
        
        Random random = new Random();
        // 産生随機數範圍[0, 10)
        System.out.println(random.nextInt(10));

    }
}      

彩票号碼生成示例

import java.util.Random;

/**
 * 随機示例
 * 36 選 7
 */
class Demo {
    public static int[] getCodeList(){
        int[] data = new int[7];
        int foot = 0;
        Random random = new Random();

        while (foot<7){
            int code = random.nextInt(37);
            if(isUse(code, data)){
                data[foot++] = code;
            }
        }
        return data;
    }

    // 檢查号碼是否可以使用,不能為0,不能重複
    public static boolean isUse(int code, int[] temp){
        if(code == 0){
            return false;
        }

        for(int x : temp){
            if(code == x){
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        int[] data = getCodeList();

        for(int x : data){
            System.out.print(x + ", ");
        }
        // 15, 19, 9, 11, 33, 2, 21, 

    }
}      

35 大數字處理類

可以使用String儲存,不過操作麻煩

繼承體系

Object
    -Number
        -Integer
        -Byte
        -Long
        -Short
        -Float
        -Double
        -BigInteger
        -BigDecimal
    -Boolean
    -Character      

BigInteger 和 BigDecimal使用方法基本相似

過大的資料也會影響程式性能,優先使用基礎資料類型

減法運算

import java.math.BigInteger;

class Demo{
    public static void main(String[] args) {
        BigInteger big1 = new BigInteger("98960973126687599871");
        BigInteger big2 = new BigInteger("98960973126687599872");

        System.out.println(big2.subtract(big1));
        // 1
    }
}      

求餘運算

import java.math.BigInteger;

class Demo{
    public static void main(String[] args) {
        BigInteger big1 = new BigInteger("1001");
        BigInteger big2 = new BigInteger("10");
        BigInteger[] ret = big1.divideAndRemainder(big2);
        System.out.println(ret[0] + ", " +  ret[1]);
        // 100, 1
    }
}      

使用BigDecimal實作四舍五入進位

import java.math.BigDecimal;
import java.math.RoundingMode;

class MathUtil {
    private MathUtil() {
    }

    // 自定義保留位數
    public static double round(double num, int scale) {
        return new BigDecimal(num).divide(
            new BigDecimal(1.0), scale, RoundingMode.HALF_UP).doubleValue();
    }
}


class Demo {
    public static void main(String[] args) {
        System.out.println(MathUtil.round(10.98766, 2)); // 10.99

    }
}      

Math使用的是基本資料類型,性能高于大資料處理類