Classes Number & Math de Java
Java Number
Généralement, lorsque des nombres sont nécessaires, nous utilisons habituellement des types de données intégrés, tels que :byte、int、long、doubleetc.
Exemple
Cependant, dans le développement réel, nous rencontrons souvent des situations où des objets sont nécessaires au lieu de types de données intégrés. Pour résoudre ce problème, le langage Java fournit une classe enveloppante correspondante pour chaque type de données intégré.
Toutes les classes enveloppantes(Integer、Long、Byte、Double、Float、Short)sont des sous-classes de la classe abstraite Number.
| Nom de classe | Type primitif correspondant | Description |
|---|---|---|
| Byte | octet | Classe enveloppe Byte |
| Short | short | Classe enveloppe Short |
| Integer | int | Classe enveloppe Integer |
| Long | long | Classe enveloppe Long |
| Float | float | Classe enveloppe Float |
| Double | double | Classe enveloppe Double |
| BigInteger | - | Entier immuable à précision arbitraire |
| BigDecimal | - | Nombre décimal signé immuable à précision arbitraire |
Ce type d'encapsulation spécialement pris en charge par le compilateur est appelé boxing. Ainsi, lorsqu'un type de données intégré est utilisé comme objet, le compilateur encapsule le type intégré dans une classe enveloppe. De même, le compilateur peut également déballer un objet en un type intégré.
La classe Number appartient au paquetage java.lang.
Number est une classe abstraite dont l'objectif principal est de fournir des méthodes de conversion unifiées pour divers types numériques :
Exemple
// Méthodes abstraites
public abstract int intValue();
public abstract long longValue();
public abstract float floatValue();
public abstract double doubleValue();
// Ajouté dans Java 8
public byte byteValue() {
return (byte)intValue();
}
public short shortValue() {
return (short)intValue();
}
}
Voici un exemple utilisant un objet Integer :
Code du fichier Test.java :
Le résultat de la compilation et de l'exécution de l'exemple ci-dessus est le suivant :
15
Lorsqu'une valeur entière est affectée à x, comme x est un objet, le compilateur effectue un boxing de x. Ensuite, pour que x puisse effectuer une addition, x doit être unboxé.
Exemples de méthodes courantes
Conversion de types primitifs
Exemple
System.out.println(num.intValue()); // 1234 (tronque les décimales)
System.out.println(num.longValue()); // 1234
System.out.println(num.floatValue()); // 1234.56
System.out.println(num.doubleValue()); // 1234.56
Comparaison numérique
Exemple
Integer x = 10;
Double y = 10.0;
// Méthode de comparaison correcte : convertir vers le même type avant de comparer
System.out.println(x.doubleValue() == y.doubleValue()); // vrai
Traitement spécial des nombres
Gestion des grands nombres
Exemple
BigDecimal bigDec = new BigDecimal("1234567890.1234567890");
// Arithmétique des grands nombres
BigInteger sum = bigInt.add(new BigInteger("1"));
BigDecimal product = bigDec.multiply(new BigDecimal("2"));
Formatage des nombres
Exemple
nf.setMaximumFractionDigits(2);
System.out.println(nf.format(1234.5678)); // "1,234.57"
Autoboxing et Unboxing
Java 5+ prend en charge la conversion automatique :
Exemple
Integer autoBoxed = 42; // Le compilateur convertit en valueOf(42)
// Auto-unboxing
int autoUnboxed = autoBoxed; // Le compilateur convertit en autoBoxed.intValue()
Classe Math de Java
La classe Math est une classe mathématique fournie par Java, située dans le paquetage java.lang, et contient des méthodes statiques pour effectuer des opérations de base.
La classe Math de Java contient des propriétés et des méthodes pour effectuer des opérations mathématiques de base, telles que les exposants élémentaires, les logarithmes, les racines carrées et les fonctions trigonométriques.
Toutes les méthodes de Math sont définies comme static, elles peuvent donc être appelées directement dans la fonction main via la classe Math.
Code du fichier Test.java :
Le résultat de la compilation et de l'exécution de l'exemple ci-dessus est le suivant :
90 度的正弦值:1.0 0度的余弦值:1.0 60度的正切值:1.7320508075688767 1的反正切值: 0.7853981633974483 π/2的角度值:90.0 3.141592653589793
Opérations mathématiques avancées
1. Opérations exponentielles et logarithmiques
Exemple
Math.log(Math.E); // ln(e) = 1
Math.log10(100); // log10(100) = 2
2. Génération de nombres aléatoires
Exemple
double random = Math.random();
// Générer un entier aléatoire dans [1, 100]
int randomInt = (int)(Math.random() * 100) + 1;
3. Autres opérations
Exemple
Math.IEEEremainder(10, 3); // Reste IEEE → 1.0
4. Champs constants
Exemple
Math.E; // La base des logarithmes népériens e ≈ 2.718281828459045
Méthodes des classes Number & Math
Le tableau suivant répertorie quelques méthodes couramment utilisées des classes Number & Math :
| Non. | Méthode et description |
|---|---|
| 1 |
xxxValue() Convertit un objet Number en une valeur du type de données xxx et la renvoie. |
| 2 |
compareTo() Compare l'objet Number avec l'argument. |
| 3 |
equals() Détermine si l'objet Number est égal à l'argument. |
| 4 |
valueOf() Renvoie un objet Number du type de données intégré spécifié. |
| 5 |
toString() Renvoie la valeur sous forme de chaîne. |
| 6 |
parseInt() Analyse la chaîne comme un type int. |
| 7 |
abs() Renvoie la valeur absolue de l'argument. |
| 8 |
ceil() Renvoie le plus petit entier supérieur ou égal à (>=) l'argument donné, sous forme de double. |
| 9 |
floor() Renvoie le plus grand entier inférieur ou égal à (<=) l'argument donné. |
| 10 |
rint() Renvoie l'entier le plus proche de l'argument. Le type de retour est double. |
| 11 |
round() Il représentel'arrondi, l'algorithme estMath.floor(x+0.5), c'est-à-dire ajouter 0.5 au nombre d'origine puis arrondir vers le bas. Ainsi, Math.round(11.5) donne 12, et Math.round(-11.5) donne -11. |
| 12 |
min() Renvoie le minimum des deux arguments. |
| 13 |
max() Renvoie le maximum des deux arguments. |
| 14 |
exp() Renvoie e (la base des logarithmes naturels) élevé à la puissance de l'argument. |
| 15 |
log() Renvoie le logarithme népérien de l'argument. |
| 16 |
pow() Renvoie le premier argument élevé à la puissance du second argument. |
| 17 |
sqrt() Renvoie la racine carrée arithmétique de l'argument. |
| 18 |
sin() Renvoie le sinus de l'argument double spécifié. |
| 19 |
cos() Renvoie le cosinus de l'argument double spécifié. |
| 20 |
tan() Renvoie la tangente de l'argument double spécifié. |
| 21 |
asin() Renvoie l'arc sinus de l'argument double spécifié. |
| 22 |
acos() Renvoie l'arc cosinus de l'argument double spécifié. |
| 23 |
atan() Renvoie l'arc tangente de l'argument double spécifié. |
| 24 |
atan2() Convertit les coordonnées cartésiennes en coordonnées polaires et renvoie l'angle des coordonnées polaires. |
| 25 |
toDegrees() Convertit l'argument en degrés. |
| 26 |
toRadians() Convertit les angles en radians. |
| 27 |
random() Renvoie un nombre aléatoire. |
Comparaison des méthodes floor, round et ceil de Math
| Paramètre | 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 |
Exemples de floor, round et ceil :
Le résultat de l'exécution de l'exemple ci-dessus est :
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.0Autres extensions