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

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

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 classeType primitif correspondantDescription
ByteoctetClasse enveloppe Byte
ShortshortClasse enveloppe Short
IntegerintClasse enveloppe Integer
LonglongClasse enveloppe Long
FloatfloatClasse enveloppe Float
DoubledoubleClasse enveloppe Double
BigInteger-Entier immuable à précision arbitraire
BigDecimal-Nombre décimal signé immuable à précision arbitraire

Java Number类

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

public abstract class Number implements Serializable {
    // 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 :

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

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

Number num = 1234.56; // En fait un type Double

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

java
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

BigInteger bigInt = new BigInteger("12345678901234567890");
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

NumberFormat nf = NumberFormat.getInstance();
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

// Autoboxing
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 :

public class Test { public static void main (String []args) { System.out.println("Sinus de 90 degrés :" + Math.sin(Math.PI/2)); System.out.println("Cosinus de 0 degrés :" + Math.cos(0)); System.out.println("Tangente de 60 degrés :" + Math.tan(Math.PI/3)); System.out.println("Arctangente de 1 :" + Math.atan(1)); System.out.println("Valeur de l'angle de π/2 :" + Math.toDegrees(Math.PI/2)); System.out.println(Math.PI); } }

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.exp(1);    // e^1 ≈ 2.718
Math.log(Math.E); // ln(e) = 1
Math.log10(100); // log10(100) = 2

2. Génération de nombres aléatoires

Exemple

// Générer un nombre aléatoire entre [0.0, 1.0)
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.hypot(3, 4); // Calculer sqrt(x²+y²) → 5.0
Math.IEEEremainder(10, 3); // Reste IEEE → 1.0

4. Champs constants

Exemple

Math.PI;    // π ≈ 3.141592653589793
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 :

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)); } }

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.0
Autres extensions