Java Number & Math-Klassen
Java Number
Im Allgemeinen, wenn Zahlen benötigt werden, verwenden wir normalerweise integrierte Datentypen, wie:byte、int、long、doubleusw.
Beispiel
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.
| Klassenname | Zugehöriger primitiver Typ | Beschreibung |
|---|---|---|
| Byte | Byte | Byte-Wrapper-Klasse |
| Short | short | Short-Wrapper-Klasse |
| Integer | int | Integer-Wrapper-Klasse |
| Long | long | Long-Wrapper-Klasse |
| Float | float | Float-Wrapper-Klasse |
| Double | double | Double-Wrapper-Klasse |
| BigInteger | - | Unveränderliche Ganzzahl mit beliebiger Genauigkeit |
| BigDecimal | - | Unveränderliche vorzeichenbehaftete Dezimalzahl mit beliebiger Genauigkeit |
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
// 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:
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
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
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
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
nf.setMaximumFractionDigits(2);
System.out.println(nf.format(1234.5678)); // "1,234.57"
Autoboxing und Unboxing
Java 5+ unterstützt automatische Konvertierung:
Beispiel
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:
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.log(Math.E); // ln(e) = 1
Math.log10(100); // log10(100) = 2
2. Zufallszahlengenerierung
Beispiel
double random = Math.random();
// Erzeuge eine zufällige Ganzzahl in [1, 100]
int randomInt = (int)(Math.random() * 100) + 1;
3. Weitere Operationen
Beispiel
Math.IEEEremainder(10, 3); // IEEE-Rest → 1.0
4. Konstante Felder
Beispiel
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:
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.0Weitere Erweiterungen