国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Java基礎(chǔ)教程】(三十六)常用類庫篇 · 第六講:數(shù)學(xué)運(yùn)算類——全面講解Java數(shù)學(xué)計(jì)算支持類庫,BigDecimal、Math、Random、DecimalFormat...~

這篇具有很好參考價值的文章主要介紹了【Java基礎(chǔ)教程】(三十六)常用類庫篇 · 第六講:數(shù)學(xué)運(yùn)算類——全面講解Java數(shù)學(xué)計(jì)算支持類庫,BigDecimal、Math、Random、DecimalFormat...~。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

java計(jì)算類,# Java基礎(chǔ)教程,java,python,數(shù)據(jù)庫,經(jīng)驗(yàn)分享,開發(fā)語言,后端,算法

1?? 概念

在現(xiàn)代軟件開發(fā)中,數(shù)學(xué)計(jì)算是不可或缺的一部分。為了滿足企業(yè)及開發(fā)人員對數(shù)學(xué)運(yùn)算的需求,Java 提供了一系列強(qiáng)大而豐富的數(shù)學(xué)計(jì)算相關(guān)類,其中包括Math、RandomBigDecimal等等。這些類旨在提供高度精確和可靠的數(shù)學(xué)操作,使開發(fā)人員能夠處理任何規(guī)模和復(fù)雜度的定量問題。

?? 數(shù)學(xué)運(yùn)算類匯總

將Java中所有用于表示數(shù)學(xué)計(jì)算支持的類匯總,羅列如下表:

類名 描述
Math 提供常用數(shù)學(xué)函數(shù)和運(yùn)算符實(shí)現(xiàn)
BigDecimal 支持高精度任意精度定點(diǎn)數(shù)計(jì)算
BigInteger 支持高精度任意精度整數(shù)計(jì)算
StrictMath Math類提供相同的方法,使用非嚴(yán)格浮點(diǎn)數(shù)語義
Random 生成偽隨機(jī)數(shù)序列
DecimalFormat 格式化數(shù)字輸出
MathContext 提供精確的數(shù)學(xué)運(yùn)算上下文環(huán)境

以上這些類在Java中提供了廣泛的數(shù)學(xué)計(jì)算支持。它們可以執(zhí)行各種數(shù)值計(jì)算和操作,包括三角函數(shù)、指數(shù)、對數(shù)、冪、絕對值、最大值、最小值等。

BigDecimalBigInteger 類具有處理任意精度整數(shù)和定點(diǎn)數(shù)計(jì)算的能力,而 Random 類用于生成偽隨機(jī)數(shù)。DecimalFormat 則用來格式化數(shù)字輸出,MathContext 提供了精確的數(shù)學(xué)運(yùn)算環(huán)境。這些類在各種場景下發(fā)揮重要作用,讓開發(fā)人員能夠進(jìn)行精確和高效的數(shù)學(xué)計(jì)算。

在本文中,主要介紹最常用的MathBigDecimal、Random等類的使用及操作方式等相關(guān)知識。而其他類的詳細(xì)操作方法API等信息,由于篇幅原因本文不再做更多介紹,感興趣的朋友可私信我一起交流。

  • Math 類是 Java 中的一個常見工具類,提供了許多靜態(tài)方法來執(zhí)行數(shù)學(xué)運(yùn)算。它支持三角函數(shù)、指數(shù)、對數(shù)、冪、絕對值、最大值、最小值等常用運(yùn)算。Math 類使用基本的浮點(diǎn)數(shù)運(yùn)算,適用于大多數(shù)簡單的數(shù)學(xué)計(jì)算。
  • BigDecimal 類是 Java 中用于執(zhí)行精確任意精度定點(diǎn)數(shù)計(jì)算的類。它可以處理極大和極小的數(shù)值,并提供高精度的計(jì)算結(jié)果。相比于 Math 類中的浮點(diǎn)數(shù)運(yùn)算,BigDecimal 可以保證運(yùn)算結(jié)果的精度和準(zhǔn)確性;
  • Random類:用于生成偽隨機(jī)數(shù)。它的設(shè)計(jì)目標(biāo)是以可預(yù)測性和均勻分布性為基礎(chǔ),提供一種可靠的隨機(jī)數(shù)生成方式。

2?? 優(yōu)勢和缺點(diǎn)

  1. Math
  • 優(yōu)點(diǎn):靜態(tài)方法方便直接調(diào)用,不需要實(shí)例化對象;封裝了常見的數(shù)學(xué)運(yùn)算,提供了簡便的操作。
  • 缺點(diǎn):基于基本浮點(diǎn)數(shù)運(yùn)算,可能導(dǎo)致精度損失,所以不適用于高精度計(jì)算。
  1. BigDecimal
  • 優(yōu)點(diǎn):提供任意精度的計(jì)算,避免了浮點(diǎn)數(shù)運(yùn)算導(dǎo)致的精度損失;支持基本的算術(shù)運(yùn)算、指數(shù)運(yùn)算等功能。
  • 缺點(diǎn):內(nèi)存占用較大,運(yùn)算速度比基本數(shù)據(jù)類型慢。
  1. Random
  • 優(yōu)點(diǎn):提供了一系列方法來生成隨機(jī)數(shù),其使用簡單而直觀。在一般情況下,隨機(jī)數(shù)生成速度相對較快,適用于大多數(shù)應(yīng)用場景。
  • 缺點(diǎn):生成的隨機(jī)數(shù)序列實(shí)際上是一個確定性的算法產(chǎn)生的,因此完全依賴于初始種子值。如果種子值不足夠隨機(jī),可能會導(dǎo)致生成的隨機(jī)數(shù)序列呈現(xiàn)明顯可預(yù)測的模式;生成的隨機(jī)數(shù)序列不適合用于加密或安全目的。

3?? 使用

3.1 各數(shù)學(xué)計(jì)算支持類使用案例

下面是一個示例程序,演示了如何使用Java中的一些數(shù)學(xué)計(jì)算支持類,包括:Math類、BigDecimal類、BigInteger類、Random類、DecimalFormat類、StrictMath類、MathContext類。代碼都有解釋說明,以便更好地理解其用法和功能:

import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.MathContext;
import java.text.DecimalFormat;
import java.util.Random;

public class MathSupportExample {
    public static void main(String[] args) {
        // Math 類示例
        double squareRoot = Math.sqrt(16); // 計(jì)算平方根,結(jié)果為 4.0
        System.out.println("Square root: " + squareRoot);

        double power = Math.pow(2, 5); // 計(jì)算指數(shù),結(jié)果為 32.0
        System.out.println("Power: " + power);

        int absValue = Math.abs(-10); // 計(jì)算絕對值,結(jié)果為 10
        System.out.println("Absolute value: " + absValue);

        double randomNum = Math.random(); // 生成介于 [0,1) 的隨機(jī)浮點(diǎn)數(shù)
        System.out.println("Random number: " + randomNum);

        // BigDecimal 類示例
        BigDecimal bigDecimal1 = new BigDecimal("10");
        BigDecimal bigDecimal2 = new BigDecimal("3");
        BigDecimal sum = bigDecimal1.add(bigDecimal2); // 相加,結(jié)果為 13
        System.out.println("Sum: " + sum);

        // BigInteger 類示例
        BigInteger bigInteger1 = new BigInteger("10");
        BigInteger bigInteger2 = new BigInteger("3");
        BigInteger product = bigInteger1.multiply(bigInteger2); // 相乘,結(jié)果為 30
        System.out.println("Product: " + product);

        // Random 類示例
        Random random = new Random();
        int randInt = random.nextInt(100); // 生成 [0, 100) 范圍內(nèi)的隨機(jī)整數(shù)
        System.out.println("Random integer: " + randInt);

        // DecimalFormat 類示例
        DecimalFormat decimalFormat = new DecimalFormat("#0.00");
        double value = 3.14159265;
        String formattedValue = decimalFormat.format(value); // 格式化數(shù)字為指定格式
        System.out.println("Formatted value: " + formattedValue);

        // StrictMath 類示例
        double sinValue = StrictMath.sin(Math.PI / 2); // 計(jì)算正弦值,結(jié)果為 1.0
        System.out.println("Sine value: " + sinValue);

        double expValue = StrictMath.exp(1); // 計(jì)算e的指數(shù)冪,結(jié)果為 2.718281828459045
        System.out.println("Exponential value: " + expValue);

        double maxNum = StrictMath.max(10, 5); // 比較兩個數(shù),返回較大值,結(jié)果為 10
        System.out.println("Maximum number: " + maxNum);

        // MathContext 類示例
        BigDecimal bigDecimal = new BigDecimal("3.14159265359");
        MathContext mathContext = new MathContext(4); // 設(shè)置精確度為4位
        BigDecimal roundedValue = bigDecimal.round(mathContext); // 四舍五入至指定精確度,結(jié)果為 3.142
        System.out.println("Rounded value: " + roundedValue);
        
    }
}

此示例程序演示了如何使用Math類進(jìn)行數(shù)學(xué)運(yùn)算、BigDecimalBigInteger類進(jìn)行高精度計(jì)算、Random類生成偽隨機(jī)數(shù)、DecimalFormat類格式化輸出。

還展示了如何使用StrictMath類提供與Math類相同的方法,但使用非嚴(yán)格浮點(diǎn)數(shù)語義,如計(jì)算正弦值、指數(shù)函數(shù)和比較兩個數(shù)。如何使用MathContext類來控制BigDecimal對象的精度。

運(yùn)行結(jié)果如下:

Square root: 4.0
Power: 32.0
Absolute value: 10
Random number: 0.15580789544457363
Sum: 13
Product: 30
Random integer: 23
Formatted value: 3.14
Sine value: 1.0
Exponential value: 2.7182818284590455
Maximum number: 10.0
Rounded value: 3.142

3.2 Math類

Math類是Java中一個常用且便捷的數(shù)學(xué)支持類,它提供了基本的數(shù)學(xué)運(yùn)算和常量,可以滿足大多數(shù)的數(shù)學(xué)計(jì)算需求。
下面是Java的Math類中的全部操作方法API的簡要介紹,以表格形式列舉如下:

方法 描述
random() 返回一個[0, 1)范圍內(nèi)的隨機(jī)浮點(diǎn)數(shù)
round(float a) 返回一個浮點(diǎn)數(shù)四舍五入為最接近的整數(shù)
round(double a) 返回一個雙精度浮點(diǎn)數(shù)四舍五入為最接近的整數(shù)
ceil(double a) 返回大于或等于給定浮點(diǎn)數(shù)的最小整數(shù)
floor(double a) 返回小于或等于給定浮點(diǎn)數(shù)的最大整數(shù)
max(int a, int b) 返回兩個整數(shù)中較大的那個值(方法重載,還支持操作:長整數(shù)、浮點(diǎn)數(shù))
min(int a, int b) 返回兩個整數(shù)中較小的那個值(方法重載,還支持操作:長整數(shù)、浮點(diǎn)數(shù))
abs(int a) 返回一個整數(shù)的絕對值(方法重載,還支持操作:長整數(shù)、浮點(diǎn)數(shù))
exp(double a) 返回指數(shù)函數(shù) e x e^x ex 的值
log(double a) 返回一個數(shù)的自然對數(shù)(以e為底)
pow(double a, double b) 返回一個數(shù)的指定次冪
sqrt(double a) 返回一個數(shù)的平方根
sin(double a) 返回一個角度的正弦函數(shù)值
cos(double a) 返回一個角度的余弦函數(shù)值
tan(double a) 返回一個角度的正切函數(shù)值
asin(double a) 返回一個角度的反正弦函數(shù)值
acos(double a) 返回一個角度的反余弦函數(shù)值
atan(double a) 返回一個角度的反正切函數(shù)值
toDegrees(double angrad) 將弧度轉(zhuǎn)換為角度
toRadians(double angdeg) 將角度轉(zhuǎn)換為弧度
ulp(float f) 返回浮點(diǎn)數(shù)的最小單位
ulp(double d) 返回雙精度浮點(diǎn)數(shù)的最小單位

下面是一個示例程序,演示了如何使用Math類中的一些方法:

import java.util.Random;

public class MathExample {
    public static void main(String[] args) {
        // random()
        double randomValue = Math.random(); // 生成[0,1)范圍內(nèi)的隨機(jī)浮點(diǎn)數(shù)
        System.out.println("Random value: " + randomValue);

        // round(double a)
        double roundedValue = Math.round(3.7); // 四舍五入為最接近的整數(shù),結(jié)果為4
        System.out.println("Rounded value: " + roundedValue);

        // ceil(double a)
        double ceilValue = Math.ceil(3.2); // 返回大于或等于給定浮點(diǎn)數(shù)的最小整數(shù),結(jié)果為4
        System.out.println("Ceil value: " + ceilValue);

        // floor(double a)
        double floorValue = Math.floor(3.8); // 返回小于或等于給定浮點(diǎn)數(shù)的最大整數(shù),結(jié)果為3
        System.out.println("Floor value: " + floorValue);

        // max(int a, int b)
        int maxValue = Math.max(10, 7); // 返回兩個整數(shù)中較大的那個值,結(jié)果為10
        System.out.println("Max value: " + maxValue);

        // min(int a, int b)
        int minValue = Math.min(5, 3); // 返回兩個整數(shù)中較小的那個值,結(jié)果為3
        System.out.println("Min value: " + minValue);
        
        // abs(int a)
        int absoluteValue = Math.abs(-10); // 返回一個整數(shù)的絕對值,結(jié)果為10
        System.out.println("Absolute value: " + absoluteValue);

        // exp(double a)
        double exponentialValue = Math.exp(1); // 計(jì)算e的指數(shù)冪,結(jié)果為2.718281828459045
        System.out.println("Exponential value: " + exponentialValue);

        // log(double a)
        double logarithm = Math.log(Math.E); // 返回一個數(shù)的自然對數(shù)(以e為底),結(jié)果為1.0
        System.out.println("Logarithm value: " + logarithm);

        // pow(double a, double b)
        double power = Math.pow(2, 3); // 返回一個數(shù)的指定次冪,結(jié)果為8.0
        System.out.println("Power value: " + power);

        // sqrt(double a)
        double squareRoot = Math.sqrt(25); // 返回一個數(shù)的平方根,結(jié)果為5.0
        System.out.println("Square root value: " + squareRoot);

        // sin(double a)
        double sineValue = Math.sin(Math.PI / 6); // 返回一個角度的正弦函數(shù)值,結(jié)果為0.5
        System.out.println("Sine value: " + sineValue);

        // asin(double a)
        double arcsineValue = Math.asin(0.5); // 返回一個角度的反正弦函數(shù)值,結(jié)果為0.5235987755982989
        System.out.println("Arcsine value: " + arcsineValue);

        // toDegrees(double angrad)
        double degrees = Math.toDegrees(Math.PI / 4); // 將弧度轉(zhuǎn)換為角度,結(jié)果為45.0
        System.out.println("Degrees value: " + degrees);

        // toRadians(double angdeg)
        double radians = Math.toRadians(90); // 將角度轉(zhuǎn)換為弧度,結(jié)果為1.5707963267948966
        System.out.println("Radians value: " + radians);
        
        // ulp(float f)
        float ulpValueFloat = Math.ulp(1.23f); // 返回浮點(diǎn)數(shù)的最小單位,結(jié)果為1.1920929E-7
        System.out.println("Ulp value (float): " + ulpValueFloat);

        // ulp(double d)
        double ulpValueDouble = Math.ulp(1.23); // 返回雙精度浮點(diǎn)數(shù)的最小單位,結(jié)果為2.220446049250313E-16
        System.out.println("Ulp value (double): " + ulpValueDouble);
    }
}

這個示例程序演示了如何使用Math類中的各種方法。它包括生成隨機(jī)數(shù)、數(shù)值舍入四舍五入、向上取整和向下取整、比較兩個數(shù)的大小、計(jì)算絕對值、指數(shù)函數(shù)、對數(shù)、冪函數(shù)、平方根、三角函數(shù)(正弦、反正弦)、角度和弧度之間的轉(zhuǎn)換、浮點(diǎn)數(shù)最小單位等操作。這些方法可以在各種數(shù)學(xué)計(jì)算場景中使用,以滿足不同的需求。

運(yùn)行結(jié)果如下:

Random value: 0.7044894178514141
Rounded value: 4.0
Ceil value: 4.0
Floor value: 3.0
Max value: 10
Min value: 3
Absolute value: 10
Exponential value: 2.718281828459045
Logarithm value: 1.0
Power value: 8.0
Square root value: 5.0
Sine value: 0.49999999999999994
Arcsine value: 0.5235987755982989
Degrees value: 45.0
Radians value: 1.5707963267948966
Ulp value (float): 1.1920929E-7
Ulp value (double): 2.220446049250313E-16

3.3 BigDecimal類

BigDecimal類是Java中用于精確計(jì)算的高精度數(shù)值運(yùn)算類。它提供了基本的數(shù)學(xué)運(yùn)算操作,比如加法、減法、乘法、除法、取余、冪等等。在大數(shù)據(jù)計(jì)算和金融應(yīng)用等場景中,BigDecimal類可以保證計(jì)算結(jié)果的精確性和準(zhǔn)確性。

下面是BigDecimal類中的全部操作方法API的匯總介紹:

方法 描述
add(BigDecimal augend) 將此BigDecimal與指定BigDecimal相加
subtract(BigDecimal subtrahend) 從此BigDecimal中減去指定BigDecimal
multiply(BigDecimal multiplicand) 將此BigDecimal與指定BigDecimal相乘
divide(BigDecimal divisor) 將此BigDecimal除以指定BigDecimal
remainder(BigDecimal divisor) 返回此BigDecimal除以指定BigDecimal的余數(shù)
pow(int n) 返回此BigDecimal的n次冪
setScale(int newScale, RoundingMode roundingMode) 將此BigDecimal的標(biāo)度設(shè)置為指定值,并進(jìn)行舍入操作
abs() 返回此BigDecimal的絕對值
negate() 返回此BigDecimal的相反數(shù)
compareTo(BigDecimal val) 將此BigDecimal與指定BigDecimal進(jìn)行比較,返回一個負(fù)整數(shù)、零或正整數(shù)
equals(Object x) 檢查此BigDecimal是否與指定對象相等
toString() 將此BigDecimal轉(zhuǎn)化為String

下面是一個示例程序,演示了如何使用BigDecimal類中的各個方法:

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

public class BigDecimalExample {
    public static void main(String[] args) {
        // 創(chuàng)建BigDecimal實(shí)例
        BigDecimal num1 = new BigDecimal("10.50");
        BigDecimal num2 = new BigDecimal("5.25");

        // add(BigDecimal augend)
        BigDecimal sum = num1.add(num2); // 將num1與num2相加
        System.out.println("Sum: " + sum);

        // subtract(BigDecimal subtrahend)
        BigDecimal difference = num1.subtract(num2); // 從num1中減去num2
        System.out.println("Difference: " + difference);

        // multiply(BigDecimal multiplicand)
        BigDecimal product = num1.multiply(num2); // 將num1與num2相乘
        System.out.println("Product: " + product);

        // divide(BigDecimal divisor)
        BigDecimal quotient = num1.divide(num2, 2, RoundingMode.HALF_UP); // 將num1除以num2(結(jié)果保留兩位小數(shù))
        System.out.println("Quotient: " + quotient);

        // remainder(BigDecimal divisor)
        BigDecimal remainder = num1.remainder(num2); // 返回num1除以num2的余數(shù)
        System.out.println("Remainder: " + remainder);

        // pow(int n)
        BigDecimal power = num1.pow(3); // 計(jì)算num1的3次冪
        System.out.println("Power: " + power);

        // setScale(int newScale, RoundingMode roundingMode)
        BigDecimal scaledNum = num1.setScale(2, RoundingMode.HALF_UP); // 將num1的小數(shù)位數(shù)設(shè)置為2并進(jìn)行四舍五入
        System.out.println("Scaled number: " + scaledNum);

        // abs()
        BigDecimal absoluteValue = num1.abs(); // 獲取num1的絕對值
        System.out.println("Absolute value: " + absoluteValue);

        // negate()
        BigDecimal negatedValue = num1.negate(); // 獲取num1的相反數(shù)
        System.out.println("Negated value: " + negatedValue);

        // compareTo(BigDecimal val)
        int comparisonResult = num1.compareTo(num2); // 比較num1和num2的大小關(guān)系
        if (comparisonResult == 0) {
            System.out.println("Both numbers are equal");
        } else if (comparisonResult < 0) {
            System.out.println("Number 1 is less than Number 2");
        } else {
            System.out.println("Number 1 is greater than Number 2");
        }

        // equals(Object x)
        boolean isEqual = num1.equals(num2); // 檢查num1是否與num2相等
        System.out.println("Is equal? " + isEqual);

        // toString()
        String stringValue = num1.toString(); // 將BigDecimal轉(zhuǎn)換為String
        System.out.println("String value: " + stringValue);
    }
}

這個示例程序演示了如何使用BigDecimal類中的各個方法。它包括創(chuàng)建BigDecimal實(shí)例、加法、減法、乘法、除法、取余、冪、精度設(shè)置、絕對值、相反數(shù)、比較大小、檢查相等性以及轉(zhuǎn)換為字符串等操作。BigDecimal類提供了更精確和可靠的數(shù)值計(jì)算功能,適用于需要處理大數(shù)值或進(jìn)行高精度計(jì)算的場景。

運(yùn)行結(jié)果如下:

Sum: 15.75
Difference: 5.25
Product: 55.1250
Quotient: 2.00
Remainder: 0.00
Power: 1157.625000
Scaled number: 10.50
Absolute value: 10.50
Negated value: -10.50
Number 1 is greater than Number 2
Is equal? false
String value: 10.50

3.4 Random類

Random類用于生成隨機(jī)數(shù)。它提供了多個生成隨機(jī)整數(shù)、浮點(diǎn)數(shù)和字節(jié)數(shù)組的方法。種子是控制隨機(jī)數(shù)序列的起始點(diǎn),可以通過 setSeed(long seed) 方法設(shè)置。使用Random類可以生成不同范圍內(nèi)的隨機(jī)整數(shù)和浮點(diǎn)數(shù),并進(jìn)行隨機(jī)選擇。它在各種需要隨機(jī)性的應(yīng)用中很有用,如游戲、模擬和密碼學(xué)等領(lǐng)域。

下面是Java的Random類中的全部操作方法API的匯總介紹:

方法 描述
nextInt() 返回一個隨機(jī)的int類型整數(shù)
nextInt(int origin, int bound) 返回一個介于origin(包括)和bound(不包括)之間的int類型整數(shù)
nextDouble() 返回一個隨機(jī)的double類型浮點(diǎn)數(shù)
nextBytes(byte[] bytes) 生成隨機(jī)的字節(jié)數(shù)組并將其放入指定的字節(jié)數(shù)組中
setSeed(long seed) 設(shè)置此Random對象的種子

下面是一個示例程序,演示了如何使用Random類中的各個方法:

import java.util.Random;
import java.util.Arrays;

public class RandomExample {
    public static void main(String[] args) {
        // 創(chuàng)建Random實(shí)例
        Random random = new Random();

        // nextInt()
        int randomNumber = random.nextInt(); // 生成一個隨機(jī)的int類型整數(shù)
        System.out.println("Random number: " + randomNumber);

        // nextInt(int origin, int bound)
        int rangeNumber = random.nextInt(10); // 生成一個介于0(包括)和10(不包括)之間的int類型整數(shù)
        System.out.println("Range number: " + rangeNumber);

        // nextDouble()
        double randomDouble = random.nextDouble(); // 生成一個隨機(jī)的double類型浮點(diǎn)數(shù)
        System.out.println("Random double: " + randomDouble);

        // nextBytes(byte[] bytes)
        byte[] byteArray = new byte[5];
        random.nextBytes(byteArray); // 生成隨機(jī)的字節(jié)數(shù)組并將其放入指定的字節(jié)數(shù)組中
        System.out.println("Random bytes: " + Arrays.toString(byteArray));

        // setSeed(long seed)
        random.setSeed(12L); // 設(shè)置Random對象的種子為12L
        long seededRandom1 = random.nextLong(); // 使用種子生成一個隨機(jī)的long類型整數(shù)
        System.out.println("Seeded random1: " + seededRandom1);
        random.setSeed(12L);
        long seededRandom2 = random.nextLong(); // 使用種子生成一個隨機(jī)的long類型整數(shù)
        System.out.println("Seeded random2: " + seededRandom2);
    }
}

這個示例程序演示了如何使用Random類中的各個方法。它包括創(chuàng)建Random實(shí)例、生成隨機(jī)整數(shù)、生成指定范圍內(nèi)的隨機(jī)整數(shù)、生成隨機(jī)浮點(diǎn)數(shù)、生成隨機(jī)字節(jié)數(shù)組以及設(shè)置種子等操作。Random類提供了生成偽隨機(jī)數(shù)的能力,可以在需要隨機(jī)性的場景中使用,如游戲、模擬和密碼學(xué)等。

運(yùn)行結(jié)果如下:

Random number: -1803381675
Range number: 1
Random double: 0.8991983917654687
Random bytes: [103, -55, -4, -16, 122]
Seeded random1: -4982598272866526024
Seeded random2: -4982598272866526024

?? 如何理解 setSeed(long seed)方法,種子(seed)是什么?
在計(jì)算機(jī)編程中,Random類用于生成偽隨機(jī)數(shù)。為了生成隨機(jī)數(shù),Random對象需要一個起始點(diǎn),這個起始點(diǎn)就是種子(seed)。種子是一個初始值,它作為隨機(jī)數(shù)生成算法的輸入,并決定了生成的隨機(jī)數(shù)序列。

Random對象使用確定性算法根據(jù)種子(seed)生成隨機(jī)數(shù)。當(dāng)傳入相同的種子,Random對象將產(chǎn)生相同的隨機(jī)數(shù)序列。這意味著如果設(shè)置了相同的種子,那么每次調(diào)用生成隨機(jī)數(shù)的方法時都會得到相同的預(yù)測性結(jié)果。

通過設(shè)置不同的種子(seed),我們可以獲得不同的隨機(jī)數(shù)序列。通常情況下,我們可以使用當(dāng)前時間作為種子值,以確保每次程序執(zhí)行時都會生成不同的隨機(jī)數(shù)序列。但有時候,我們希望具有可重現(xiàn)性,即使在不同的執(zhí)行環(huán)境中也可以生成相同的隨機(jī)數(shù)序列,這時可以手動設(shè)置種子為特定的值。

總結(jié)來說,種子(seed)是Random對象生成隨機(jī)數(shù)的起始點(diǎn),不同的種子會生成不同的隨機(jī)數(shù)序列。


3.5 DecimalFormat類

DecimalFormat類中的操作方法可以幫助我們自定義數(shù)字格式,并進(jìn)行數(shù)字格式化操作,如設(shè)置小數(shù)位數(shù)、設(shè)置前綴和后綴符號以及設(shè)置取整模式等。

下表是Java的DecimalFormat類的全部操作方法API:

方法簽名 描述
DecimalFormat() 創(chuàng)建一個DecimalFormat對象,默認(rèn)使用的格式樣式與默認(rèn)語言環(huán)境相關(guān)
DecimalFormat(String pattern) 用給定的模式創(chuàng)建一個DecimalFormat對象
applyLocalizedPattern(String pattern) 根據(jù)本地化約定將給定的模式應(yīng)用于格式器
applyPattern(String pattern) 將給定的模式應(yīng)用于格式器
format(double number) 格式化給定的數(shù)字,返回一個字符串結(jié)果
getMaximumFractionDigits() 返回此格式器用于格式化小數(shù)部分的最大位數(shù)
getMinimumFractionDigits() 返回此格式器用于格式化小數(shù)部分的最小位數(shù)
getNegativePrefix() 返回負(fù)數(shù)前綴的字符串
getNegativeSuffix() 返回負(fù)數(shù)后綴的字符串
getPositivePrefix() 返回正數(shù)前綴的字符串
getPositiveSuffix() 返回正數(shù)后綴的字符串
setMaximumFractionDigits(int newValue) 設(shè)置此格式器用于格式化小數(shù)部分的最大位數(shù)
setMinimumFractionDigits(int newValue) 設(shè)置此格式器用于格式化小數(shù)部分的最小位數(shù)
setNegativePrefix(String newValue) 設(shè)置負(fù)數(shù)前綴的字符串
setNegativeSuffix(String newValue) 設(shè)置負(fù)數(shù)后綴的字符串
setPositivePrefix(String newValue) 設(shè)置正數(shù)前綴的字符串
setPositiveSuffix(String newValue) 設(shè)置正數(shù)后綴的字符串
setRoundingMode(RoundingMode mode) 設(shè)置四舍五入模式

下面是一個示例程序,演示如何使用上述每個DecimalFormat類的方法:

import java.text.DecimalFormat;
import java.math.RoundingMode;

public class DecimalFormatExample {
    public static void main(String[] args) {
        double number = 12345.12345678;

        // 創(chuàng)建一個DecimalFormat對象,默認(rèn)使用的格式樣式與默認(rèn)語言環(huán)境相關(guān)
        DecimalFormat df1 = new DecimalFormat();
        System.out.println(df1.format(number));

        // 用給定的模式創(chuàng)建一個DecimalFormat對象
        DecimalFormat df2 = new DecimalFormat("#,###.00");
        System.out.println(df2.format(number));

        // 將給定的模式應(yīng)用于格式器
        df1.applyPattern("0.##");
        System.out.println(df1.format(number));

        // 根據(jù)本地化約定將給定的模式應(yīng)用于格式器
        df2.applyLocalizedPattern("#.###");
        System.out.println(df2.format(number));

        // 設(shè)置此格式器用于格式化小數(shù)部分的最大位數(shù)
        int maxFractionDigits = 5;
        df1.setMaximumFractionDigits(maxFractionDigits);
        System.out.println(df1.format(number));
        
        // 設(shè)置此格式器用于格式化小數(shù)部分的最小位數(shù)
        double tempNumber = 666;
        int minFractionDigits = 1;
        df2.setMinimumFractionDigits(minFractionDigits);
        System.out.println(df2.format(tempNumber));

        // 返回此格式器用于格式化小數(shù)部分的最大位數(shù)
        int maxDigits1 = df1.getMaximumFractionDigits();
        System.out.println("Maximum fraction digits for df1: " + maxDigits1);

        // 返回此格式器用于格式化小數(shù)部分的最小位數(shù)
        int minDigits2 = df2.getMinimumFractionDigits();
        System.out.println("Minimum fraction digits for df2: " + minDigits2);

        // 設(shè)置負(fù)數(shù)前綴的字符串
        df1.setNegativePrefix("(-)");

        // 設(shè)置負(fù)數(shù)后綴的字符串
        df1.setNegativeSuffix(" NEGATIVE");

        // 設(shè)置正數(shù)前綴的字符串
        df1.setPositivePrefix("+");

        // 設(shè)置正數(shù)后綴的字符串
        df1.setPositiveSuffix(" POSITIVE");

        // 設(shè)置四舍五入模式
        df1.setRoundingMode(RoundingMode.HALF_UP);

        // 格式化給定的數(shù)字,返回一個字符串結(jié)果
        String formattedNumber1 = df1.format(number);
        number = -1234.123456;
        String formattedNumber2 = df1.format(number);

        System.out.println("Formatted number using df1: " + formattedNumber1);
        System.out.println("Formatted number using df1: " + formattedNumber2);
    }
}

程序運(yùn)行結(jié)果如下:

12,345.123
12,345.12
12345.12
12345.123
12345.12346
666.0
Maximum fraction digits for df1: 5
Minimum fraction digits for df2: 1
Formatted number using df1: +12345.12346 POSITIVE
Formatted number using df1: (-)1234.12346 NEGATIVE

4?? 應(yīng)用場景

Java 的數(shù)學(xué)計(jì)算相關(guān)類可廣泛應(yīng)用于各種場景,包括但不限于:

  • 科學(xué)計(jì)算和統(tǒng)計(jì)分析;
  • 金融領(lǐng)域的復(fù)雜計(jì)算(如貨幣交易、稅務(wù)計(jì)算);
  • 游戲開發(fā)中的碰撞檢測、物理模擬等;
  • 圖像處理中的幾何變換、濾波等。

注意
使用時注意需要結(jié)合具體業(yè)務(wù)場景要求選擇合適的精度和運(yùn)算方式,避免精度丟失和錯誤結(jié)果。
當(dāng)涉及處理精確貨幣計(jì)算時,務(wù)必使用 BigDecimal 類以避免舍入誤差。

5?? 使用技巧

  1. BigDecimal
    BigDecimal類用于進(jìn)行高精度的數(shù)學(xué)計(jì)算,提供了精確的數(shù)字操作。它適用于需要精確計(jì)算、處理貨幣等涉及小數(shù)位數(shù)較多或要求高精度的場景。使用技巧:

    • 創(chuàng)建BigDecimal對象時,可以使用字符串或基本數(shù)據(jù)類型作為參數(shù)傳入構(gòu)造函數(shù)。避免使用雙精度浮點(diǎn)數(shù)或浮點(diǎn)字面值來創(chuàng)建對象,以免精度丟失;
    • 使用BigDecimal的方法執(zhí)行數(shù)學(xué)運(yùn)算時,例如add、subtract等。注意使用對應(yīng)的方法進(jìn)行除法運(yùn)算時,指定精確的舍入規(guī)則(RoundingMode);
    • 避免使用doubleValue方法將對象轉(zhuǎn)換為雙精度浮點(diǎn)數(shù),因?yàn)檫@可能導(dǎo)致精度損失。盡量保持結(jié)果在BigDecimal類型中進(jìn)行處理。

  2. Math
    Math類提供了很多數(shù)學(xué)計(jì)算相關(guān)的靜態(tài)方法,可用于執(zhí)行各種數(shù)學(xué)計(jì)算操作。使用技巧:

    • 盡量避免多次調(diào)用Math類中的復(fù)雜計(jì)算方法,因?yàn)槠涞讓涌赡軙?zhí)行較慢。如果需要重復(fù)使用某個計(jì)算結(jié)果,可以將其保存在變量中,避免重復(fù)計(jì)算;
    • 注意Math類中的一些常量(如PI和E),可以通過靜態(tài)字段直接訪問,避免重復(fù)計(jì)算或調(diào)用一個方法來獲取常量的值。

  3. Random
    Random類用于生成偽隨機(jī)數(shù)。使用技巧:

    • 想要生成特定范圍內(nèi)的隨機(jī)數(shù),使用nextIntnextDouble等方法,并根據(jù)需要進(jìn)行線性變換或縮放操作;
    • 盡量避免在頻繁循環(huán)或大量生成隨機(jī)數(shù)的場景中創(chuàng)建新的對象??梢詫ο舐暶鳛槿肿兞浚员愣啻问褂猛粋€對象;
    • 在創(chuàng)建Random對象時,建議將種子(seed)設(shè)置為當(dāng)前時間的毫秒數(shù),以獲得較好的隨機(jī)性。

  4. DecimalFormat
    DecimalFormat類用于格式化數(shù)字。通過指定模式(pattern)和相關(guān)設(shè)置,可以自定義數(shù)字的顯示方式,包括小數(shù)位數(shù)、千分位分隔符、前綴后綴等。使用技巧:

    • 對于重復(fù)使用相同模式的情況,避免每次都重新創(chuàng)建DecimalFormat對象。建議將對象聲明為靜態(tài)變量,以便多次重用;
    • 注意設(shè)置適當(dāng)?shù)纳崛肽J?RoundingMode)來控制格式化后的數(shù)字舍入規(guī)則,以滿足需要的精確度和準(zhǔn)確性要求。

以上是關(guān)于幾個常用的Java數(shù)學(xué)計(jì)算類庫的基本使用和一些優(yōu)化技巧。根據(jù)具體的需求和情境,可以進(jìn)一步了解它們的詳細(xì)功能和更多用法,并根據(jù)實(shí)際情況進(jìn)行調(diào)整和優(yōu)化代碼。

?? 總結(jié)

Java 的數(shù)學(xué)計(jì)算相關(guān)類提供了強(qiáng)大的數(shù)學(xué)運(yùn)算和操作功能。開發(fā)人員可以根據(jù)實(shí)際需求,選擇適當(dāng)?shù)念悂韴?zhí)行簡單或高精度的數(shù)學(xué)計(jì)算。但在使用過程中,需要注意選擇合適的精度、性能優(yōu)化和避免誤差等問題。通過熟悉這些類的特性與用法,并靈活運(yùn)用,我們能夠更好地利用 Java 提供的數(shù)學(xué)計(jì)算能力解決實(shí)際問題。

?? 本文源碼下載地址

Java的數(shù)學(xué)運(yùn)算處理類講解代碼(BigDecimal、Math、Random、DecimalFormat類全部操作方法API)

java計(jì)算類,# Java基礎(chǔ)教程,java,python,數(shù)據(jù)庫,經(jīng)驗(yàn)分享,開發(fā)語言,后端,算法


? 溫習(xí)回顧上一篇(點(diǎn)擊跳轉(zhuǎn))
《【Java基礎(chǔ)教程】(三十五)常用類庫篇 · 第五講:System類——解析系統(tǒng)輔助工具System類,一個系統(tǒng)操作與資源管理工具類 ~》

? 繼續(xù)閱讀下一篇(點(diǎn)擊跳轉(zhuǎn))
《【Java基礎(chǔ)教程】(三十七)常用類庫篇 · 第七講:日期時間處理類——三萬字全面講解 LocalDateTime和 DateTimeFormatter,Date、Calendar ~》
文章來源地址http://www.zghlxwxcb.cn/news/detail-604213.html

java計(jì)算類,# Java基礎(chǔ)教程,java,python,數(shù)據(jù)庫,經(jīng)驗(yàn)分享,開發(fā)語言,后端,算法

到了這里,關(guān)于【Java基礎(chǔ)教程】(三十六)常用類庫篇 · 第六講:數(shù)學(xué)運(yùn)算類——全面講解Java數(shù)學(xué)計(jì)算支持類庫,BigDecimal、Math、Random、DecimalFormat...~的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Java基礎(chǔ)教程】(三十一)常用類庫篇 · 第一講:Optional類——解鎖Java的Optional操作,消滅那些隱匿的空指針,還程序世界一個安穩(wěn)!~

    【Java基礎(chǔ)教程】(三十一)常用類庫篇 · 第一講:Optional類——解鎖Java的Optional操作,消滅那些隱匿的空指針,還程序世界一個安穩(wěn)!~

    Optional 類是Java 8引入的新特性,旨在解決空值( null )的處理問題 。它的設(shè)計(jì)目的是為了提供一種更好的方式來處理可能為空的值,避免使用 null 導(dǎo)致空指針異常。 Optional 是一個容器對象,可以持有某個類型的非空值或者空值。它是一個包裝類,用于替代可能為空的引用變

    2024年02月15日
    瀏覽(82)
  • 【Java練習(xí)題匯總】《第一行代碼JAVA》Java常用類庫篇,匯總Java練習(xí)題——Optional類、包裝類、可變字符串支持類、Runtime類、System類、數(shù)學(xué)運(yùn)算類、日期時間處理...

    【Java練習(xí)題匯總】《第一行代碼JAVA》Java常用類庫篇,匯總Java練習(xí)題——Optional類、包裝類、可變字符串支持類、Runtime類、System類、數(shù)學(xué)運(yùn)算類、日期時間處理...

    一、填空題 在 java.lang 包中提供了兩個字符串類,分別是________ 和________ 。這兩個類都是________ 接口的子類,字符串類提供的求字符串長度的方法是________________ 。 Java 提供的兩個大數(shù)操作類是________ 和________ 。 對象克隆方法是________ 類提供的,方法名稱是________________ ,對

    2024年02月16日
    瀏覽(37)
  • 【Java基礎(chǔ)教程】(二十六)Java新特性篇 · 第六講:注解——解碼程序設(shè)計(jì)中的元數(shù)據(jù)利器,用小小的@符里做大大的開發(fā)~

    【Java基礎(chǔ)教程】(二十六)Java新特性篇 · 第六講:注解——解碼程序設(shè)計(jì)中的元數(shù)據(jù)利器,用小小的@符里做大大的開發(fā)~

    Java 注解(Annotation) 是Java語言中一種元數(shù)據(jù)形式,它提供了一種在代碼中添加元數(shù)據(jù)的方式。注解為程序員提供了向代碼中添加額外信息的能力,這些額外信息可以被編譯器、工具或者運(yùn)行時環(huán)境使用。 優(yōu)點(diǎn): 提供了一種 更加簡潔和可讀性強(qiáng) 的代碼編寫風(fēng)格; 增強(qiáng)代碼的

    2024年02月16日
    瀏覽(22)
  • 【JavaSE】Java基礎(chǔ)語法(三十六):File & IO流

    【JavaSE】Java基礎(chǔ)語法(三十六):File & IO流

    java.io.File類是文件和目錄路徑名的抽象表示形式,主要用于文件和目錄的創(chuàng)建、查找和刪除等操作。 File:它是文件和目錄路徑名的抽象表示 文件和目錄可以通過File封裝成對象 File封裝的對象僅僅是一個路徑名。它可以是存在的,也可以是不存在的。 | 方法名 | 說明 | | —

    2024年02月07日
    瀏覽(29)
  • 【Java零基礎(chǔ)入門篇】第 ⑦ 期 - 常用類庫

    【Java零基礎(chǔ)入門篇】第 ⑦ 期 - 常用類庫

    博主:命運(yùn)之光 專欄:Java零基礎(chǔ)入門 ? 學(xué)習(xí)目標(biāo) 掌握J(rèn)ava各種常用類庫的使用方法。 目錄 Java類庫 字符串String String 概述 創(chuàng)建字符串對象的2種方式 String類的特點(diǎn) 創(chuàng)建字符串對象的2種方式 總結(jié):創(chuàng)建字符串對象的2種方式區(qū)別 字符串的比較 字符串的比較 String類其它常用

    2024年02月04日
    瀏覽(22)
  • redis基礎(chǔ)(三十六)

    redis基礎(chǔ)(三十六)

    安裝redis、配置redis 目錄 一、 概述 (一)NoSQL 1、類型 2、應(yīng)用場景 (二)Redis 二、安裝 (一)編譯安裝 (二)RPM安裝 三、目錄結(jié)構(gòu) 四、命令解析 五、redis登錄更改 1、發(fā)現(xiàn)問題 2、解決辦法 六、數(shù)據(jù)庫操作 (一)登錄數(shù)據(jù)庫 (二)幫助信息 1、help 命令字 2、tab補(bǔ)齊 (三

    2024年02月14日
    瀏覽(23)
  • Qt基礎(chǔ)之三十六:異常處理

    Qt基礎(chǔ)之三十六:異常處理

    本文將介紹如何在Qt中使用try...catch和調(diào)試dump文件來處理異常。 Qt版本5.12.6 一段簡單的捕獲異常的代碼,新建一個控制臺工程,pro文件不用修改 輸出:CSDN:Cao Shang Pa QT_THROW那行如果改成:QT_THROW(\\\"CSDN:Cao Shang Pa\\\"); 輸出:Unknown Exception 這是因?yàn)楫惓J菑?qiáng)類型的,在catch異常的時候

    2024年02月07日
    瀏覽(22)
  • MySQL基礎(chǔ)(三十六)其他數(shù)據(jù)庫日志

    MySQL基礎(chǔ)(三十六)其他數(shù)據(jù)庫日志

    千萬不要小看日志 。很多看似奇怪的問題,答案往往就藏在日志里。很多情況下,只有通過查看日志才能發(fā)現(xiàn)問題的原因,真正解決問題。所以,一定要學(xué)會查看日志,養(yǎng)成檢查日志的習(xí)慣,對提升你的數(shù)據(jù)庫應(yīng)用開發(fā)能力至關(guān)重要。 MySQL8.0 官網(wǎng)日志地址:“ https://dev.mys

    2024年02月05日
    瀏覽(96)
  • 前端基礎(chǔ)(三十六):讀取本地音視頻設(shè)備并進(jìn)行播放

    前端基礎(chǔ)(三十六):讀取本地音視頻設(shè)備并進(jìn)行播放

    請求媒體輸入和輸出設(shè)備的列表,例如麥克風(fēng),攝像機(jī),耳機(jī)設(shè)備等 會提示用戶給予使用媒體輸入的許可,媒體輸入會產(chǎn)生一個MediaStream,里面包含了請求的媒體類型的軌道。此流可以包含一個視頻軌道(來自硬件或者虛擬視頻源,比如相機(jī)、視頻采集設(shè)備和屏幕共享服務(wù)等

    2024年02月15日
    瀏覽(32)
  • 【前端知識】React 基礎(chǔ)鞏固(三十六)——RTK中的異步操作

    【前端知識】React 基礎(chǔ)鞏固(三十六)——RTK中的異步操作

    引入RTK中的createAsyncThunk,在extraReducers中監(jiān)聽執(zhí)行狀態(tài) 在界面中引入所需的異步操作Action 查看運(yùn)行結(jié)果 extraReducer還可以傳入一個函數(shù),函數(shù)接受一個builder參數(shù): 查看運(yùn)行結(jié)果,與之前的寫法結(jié)果一致

    2024年02月15日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包