Java Number & Math-Klassen

Java Number

Im Allgemeinen, wenn Zahlen benötigt werden, verwenden wir normalerweise integrierte Datentypen, wie:byte、int、long、doubleusw.

Beispiel

int a = 5000; float b = 13.65f; byte c = 0x4a;

In der tatsächlichen Entwicklung stoßen wir jedoch häufig auf Situationen, in denen Objekte anstelle von integrierten Datentypen benötigt werden. Um dieses Problem zu lösen, bietet die Sprache Java für jeden integrierten Datentyp eine entsprechende Wrapper-Klasse.

Alle Wrapper-Klassen(Integer、Long、Byte、Double、Float、Short)sind Unterklassen der abstrakten Klasse Number.

KlassennameZugehöriger primitiver TypBeschreibung
ByteByteByte-Wrapper-Klasse
ShortshortShort-Wrapper-Klasse
IntegerintInteger-Wrapper-Klasse
LonglongLong-Wrapper-Klasse
FloatfloatFloat-Wrapper-Klasse
DoubledoubleDouble-Wrapper-Klasse
BigInteger-Unveränderliche Ganzzahl mit beliebiger Genauigkeit
BigDecimal-Unveränderliche vorzeichenbehaftete Dezimalzahl mit beliebiger Genauigkeit

Java Number类

Diese spezielle, vom Compiler unterstützte Art des Verpackens wird Boxing genannt. Wenn also ein eingebauter Datentyp als Objekt verwendet wird, verpackt der Compiler den eingebauten Typ in eine Wrapper-Klasse. Ebenso kann der Compiler auch ein Objekt in einen eingebauten Typ entpacken.

Die Klasse Number gehört zum Paket java.lang.

Number ist eine abstrakte Klasse, deren Hauptzweck darin besteht, einheitliche Konvertierungsmethoden für verschiedene numerische Typen bereitzustellen:

Beispiel

public abstract class Number implements Serializable {
    // Abstrakte Methoden
    public abstract int intValue();
    public abstract long longValue();
    public abstract float floatValue();
    public abstract double doubleValue();
   
    // In Java 8 hinzugefügt
    public byte byteValue() {
        return (byte)intValue();
    }
    public short shortValue() {
        return (short)intValue();
    }
}

Nachfolgend ein Beispiel zur Verwendung eines Integer-Objekts:

Code der Datei Test.java:

public class Test{ public static void main(String[] args){ Integer x = 5; x = x + 10; System.out.println(x); } }

Das Ergebnis des Kompilierens und Ausführens des obigen Beispiels ist wie folgt:

15

Wenn x ein ganzzahliger Wert zugewiesen wird, boxt der Compiler x, da x ein Objekt ist. Dann muss x, damit es eine Addition durchführen kann, entboxt werden.

Gängige Methodenbeispiele

Umwandlung primitiver Typen

Beispiel

Number num = 1234.56; // Tatsächlich ein Double-Typ

System.out.println(num.intValue());    // 1234 (schneidet Nachkommastellen ab)
System.out.println(num.longValue());   // 1234
System.out.println(num.floatValue());  // 1234.56
System.out.println(num.doubleValue()); // 1234.56

Numerischer Vergleich

Beispiel

java
Integer x = 10;
Double y = 10.0;

// Korrekte Vergleichsmethode: vor dem Vergleich in denselben Typ konvertieren
System.out.println(x.doubleValue() == y.doubleValue()); // true

Spezielle numerische Behandlung

Umgang mit großen Zahlen

Beispiel

BigInteger bigInt = new BigInteger("12345678901234567890");
BigDecimal bigDec = new BigDecimal("1234567890.1234567890");

// Arithmetik mit großen Zahlen
BigInteger sum = bigInt.add(new BigInteger("1"));
BigDecimal product = bigDec.multiply(new BigDecimal("2"));

Zahlenformatierung

Beispiel

NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(2);

System.out.println(nf.format(1234.5678)); // "1,234.57"

Autoboxing und Unboxing

Java 5+ unterstützt automatische Konvertierung:

Beispiel

// Autoboxing
Integer autoBoxed = 42; // Compiler konvertiert zu Integer.valueOf(42)

// Auto-Unboxing
int autoUnboxed = autoBoxed; // Compiler konvertiert zu autoBoxed.intValue()

Java Math-Klasse

Die Math-Klasse ist eine von Java bereitgestellte mathematische Hilfsklasse im Paket java.lang, die statische Methoden für grundlegende numerische Operationen enthält.

Die Math-Klasse von Java enthält Eigenschaften und Methoden für grundlegende mathematische Operationen wie elementare Exponenten, Logarithmen, Quadratwurzeln und trigonometrische Funktionen.

Alle Methoden von Math sind als statisch definiert, sodass sie in der main-Funktion direkt über die Klasse Math aufgerufen werden können.

Code der Datei Test.java:

public class Test { public static void main (String []args) { System.out.println("Sinus von 90 Grad:" + Math.sin(Math.PI/2)); System.out.println("Kosinus von 0 Grad:" + Math.cos(0)); System.out.println("Tangens von 60 Grad:" + Math.tan(Math.PI/3)); System.out.println("Arkustangens von 1:" + Math.atan(1)); System.out.println("Winkelwert von π/2:" + Math.toDegrees(Math.PI/2)); System.out.println(Math.PI); } }

Das Ergebnis des Kompilierens und Ausführens des obigen Beispiels ist wie folgt:

90 度的正弦值:1.0
0度的余弦值:1.0
60度的正切值:1.7320508075688767
1的反正切值: 0.7853981633974483
π/2的角度值:90.0
3.141592653589793

Erweiterte mathematische Operationen

1. Exponentielle und logarithmische Operationen

Beispiel

Math.exp(1);    // e^1 ≈ 2.718
Math.log(Math.E); // ln(e) = 1
Math.log10(100); // log10(100) = 2

2. Zufallszahlengenerierung

Beispiel

// Erzeuge eine Zufallszahl zwischen [0.0, 1.0)
double random = Math.random();

// Erzeuge eine zufällige Ganzzahl in [1, 100]
int randomInt = (int)(Math.random() * 100) + 1;

3. Weitere Operationen

Beispiel

Math.hypot(3, 4); // Berechne sqrt(x²+y²) → 5.0
Math.IEEEremainder(10, 3); // IEEE-Rest → 1.0

4. Konstante Felder

Beispiel

Math.PI;    // π ≈ 3.141592653589793
Math.E;     // Die Basis der natürlichen Logarithmen e ≈ 2.718281828459045

Methoden der Klassen Number und Math

Die folgende Tabelle listet einige häufig verwendete Methoden der Klassen Number und Math auf:

Nein. Methode und Beschreibung
1 xxxValue()
Konvertiert ein Number-Objekt in einen Wert des Datentyps xxx und gibt ihn zurück.
2 compareTo()
Vergleicht das Number-Objekt mit dem Argument.
3 equals()
Bestimmt, ob das Number-Objekt gleich dem Argument ist.
4 valueOf()
Gibt ein Number-Objekt des angegebenen integrierten Datentyps zurück.
5 toString()
Gibt den Wert als Zeichenkette zurück.
6 parseInt()
Parst die Zeichenkette als int-Typ.
7 abs()
Gibt den Absolutwert des Arguments zurück.
8 ceil()
Gibt die kleinste ganze Zahl größer oder gleich (>=) dem angegebenen Argument als double zurück.
9 floor()
Gibt die größte ganze Zahl kleiner oder gleich (<=) dem angegebenen Argument zurück.
10 rint()
Gibt die ganze Zahl zurück, die dem Argument am nächsten liegt. Der Rückgabetyp ist double.
11 round()
Es steht fürRundung, der Algorithmus istMath.floor(x+0.5), das heißt, addiere 0.5 zur ursprünglichen Zahl und runde dann ab. Also ergibt Math.round(11.5) 12, und Math.round(-11.5) ergibt -11.
12 min()
Gibt das Minimum der beiden Argumente zurück.
13 max()
Gibt das Maximum der beiden Argumente zurück.
14 exp()
Gibt e (die Basis der natürlichen Logarithmen) potenziert mit dem Argument zurück.
15 log()
Gibt den natürlichen Logarithmus des Arguments zurück.
16 pow()
Gibt das erste Argument potenziert mit dem zweiten Argument zurück.
17 sqrt()
Gibt die arithmetische Quadratwurzel des Arguments zurück.
18 sin()
Gibt den Sinus des angegebenen double-Arguments zurück.
19 cos()
Gibt den Kosinus des angegebenen double-Arguments zurück.
20 tan()
Gibt den Tangens des angegebenen double-Arguments zurück.
21 asin()
Gibt den Arkussinus des angegebenen double-Arguments zurück.
22 acos()
Gibt den Arkuskosinus des angegebenen double-Arguments zurück.
23 atan()
Gibt den Arkustangens des angegebenen double-Arguments zurück.
24 atan2()
Wandelt kartesische Koordinaten in Polarkoordinaten um und gibt den Winkel der Polarkoordinaten zurück.
25 toDegrees()
Wandelt das Argument in Grad um.
26 toRadians()
Wandelt Winkel in Bogenmaß um.
27 random()
Gibt eine Zufallszahl zurück.

Vergleich der Methoden Math.floor, Math.round und Math.ceil

Parameter Math.floor Math.round Math.ceil
1.4 1 1 2
1.5 1 2 2
1.6 1 2 2
-1.4 -2 -1 -1
-1.5 -2 -1 -1
-1.6 -2 -2 -1

Beispiele für floor, round und ceil:

public class Main { public static void main(String[] args) { double[] nums = { 1.4, 1.5, 1.6, -1.4, -1.5, -1.6 }; for (double num : nums) { test(num); } } private static void test(double num) { System.out.println("Math.floor(" + num + ")=" + Math.floor(num)); System.out.println("Math.round(" + num + ")=" + Math.round(num)); System.out.println("Math.ceil(" + num + ")=" + Math.ceil(num)); } }

Das Ergebnis der Ausführung des obigen Beispiels ist:

Math.floor(1.4)=1.0
Math.round(1.4)=1
Math.ceil(1.4)=2.0
Math.floor(1.5)=1.0
Math.round(1.5)=2
Math.ceil(1.5)=2.0
Math.floor(1.6)=1.0
Math.round(1.6)=2
Math.ceil(1.6)=2.0
Math.floor(-1.4)=-2.0
Math.round(-1.4)=-1
Math.ceil(-1.4)=-1.0
Math.floor(-1.5)=-2.0
Math.round(-1.5)=-1
Math.ceil(-1.5)=-1.0
Math.floor(-1.6)=-2.0
Math.round(-1.6)=-2
Math.ceil(-1.6)=-1.0
Weitere Erweiterungen