Clases Number y Math de Java
Java Number
Generalmente, cuando necesitamos usar números, solemos usar los tipos de datos integrados, como:byte、int、long、doubleetc.
Ejemplo
Sin embargo, en el proceso de desarrollo real, a menudo nos encontramos con situaciones en las que necesitamos usar objetos en lugar de tipos de datos integrados. Para resolver este problema, el lenguaje Java proporciona una clase envoltorio (wrapper) correspondiente para cada tipo de datos integrado.
Todas las clases envoltorio(Integer、Long、Byte、Double、Float、Short)son subclases de la clase abstracta Number.
| Nombre de clase | Tipo primitivo correspondiente | Descripción |
|---|---|---|
| Byte | byte | Clase envoltorio del tipo byte |
| Short | short | Clase envoltorio del tipo short |
| Integer | int | Clase envoltorio del tipo int |
| Long | long | Clase envoltorio del tipo long |
| Float | float | Clase envoltorio del tipo float |
| Double | double | Clase envoltorio del tipo double |
| BigInteger | - | Entero inmutable de precisión arbitraria |
| BigDecimal | - | Número decimal con signo inmutable de precisión arbitraria |
Este envoltorio, especialmente admitido por el compilador, se denomina autoboxing. Por lo tanto, cuando un tipo de datos integrado se usa como objeto, el compilador envuelve (boxea) el tipo integrado en su clase envoltorio. De manera similar, el compilador también puede desenvolver (unboxear) un objeto a un tipo de datos integrado.
La clase Number pertenece al paquete java.lang.
Number es una clase abstracta cuya función principal es proporcionar métodos de conversión unificados para varios tipos numéricos:
Ejemplo
// Métodos abstractos
public abstract int intValue();
public abstract long longValue();
public abstract float floatValue();
public abstract double doubleValue();
// Añadido en Java 8
public byte byteValue() {
return (byte)intValue();
}
public short shortValue() {
return (short)intValue();
}
}
A continuación se muestra un ejemplo que utiliza un objeto Integer:
Código del archivo Test.java:
El resultado de compilar y ejecutar el ejemplo anterior es el siguiente:
15
Cuando a x se le asigna un valor entero, como x es un objeto, el compilador debe aplicar autoboxing a x. Luego, para que x pueda realizar la operación de suma, debe aplicar unboxing a x.
Ejemplo de métodos comunes
Conversión de tipos primitivos
Ejemplo
System.out.println(num.intValue()); // 1234 (truncando decimales)
System.out.println(num.longValue()); // 1234
System.out.println(num.floatValue()); // 1234.56
System.out.println(num.doubleValue()); // 1234.56
Comparación de valores numéricos
Ejemplo
Integer x = 10;
Double y = 10.0;
// Forma correcta de comparar: convertir al mismo tipo y luego comparar
System.out.println(x.doubleValue() == y.doubleValue()); // true
Manejo de valores numéricos especiales
Manejo de números grandes
Ejemplo
BigDecimal bigDec = new BigDecimal("1234567890.1234567890");
// Operaciones con números grandes
BigInteger sum = bigInt.add(new BigInteger("1"));
BigDecimal product = bigDec.multiply(new BigDecimal("2"));
Formato de valores numéricos
Ejemplo
nf.setMaximumFractionDigits(2);
System.out.println(nf.format(1234.5678)); // "1,234.57"
Autoboxing y unboxing
Java 5+ admite la conversión automática:
Ejemplo
Integer autoBoxed = 42; // El compilador lo convierte a Integer.valueOf(42)
// Unboxing automático
int autoUnboxed = autoBoxed; // El compilador lo convierte a autoBoxed.intValue()
Clase Math de Java
La clase Math es una clase de utilidades matemáticas proporcionada por Java, ubicada en el paquete java.lang, que contiene métodos estáticos para realizar operaciones numéricas básicas.
La clase Math de Java contiene propiedades y métodos para realizar operaciones matemáticas básicas, como exponentes elementales, logaritmos, raíces cuadradas y funciones trigonométricas.
Los métodos de Math están definidos como static, por lo que se pueden llamar directamente desde la clase Math en la función principal.
Código del archivo Test.java:
El resultado de compilar y ejecutar el ejemplo anterior es el siguiente:
90 度的正弦值:1.0 0度的余弦值:1.0 60度的正切值:1.7320508075688767 1的反正切值: 0.7853981633974483 π/2的角度值:90.0 3.141592653589793
Operaciones matemáticas avanzadas
1. Operaciones con exponenciales y logaritmos
Ejemplo
Math.log(Math.E); // ln(e) = 1
Math.log10(100); // log10(100) = 2
2. Generación de números aleatorios
Ejemplo
double random = Math.random();
// Genera un entero aleatorio entre [1, 100]
int randomInt = (int)(Math.random() * 100) + 1;
3. Otras operaciones
Ejemplo
Math.IEEEremainder(10, 3); // Resto IEEE → 1.0
4. Campos constantes
Ejemplo
Math.E; // Base del logaritmo natural e ≈ 2.718281828459045
Métodos de las clases Number y Math
La siguiente tabla enumera algunos métodos comunes de las clases Number y Math:
| N.º | Método y descripción |
|---|---|
| 1 |
xxxValue() Convierte el objeto Number al tipo de dato xxx y devuelve el valor. |
| 2 |
compareTo() Compara el objeto number con el argumento. |
| 3 |
equals() Determina si el objeto number es igual al argumento. |
| 4 |
valueOf() Devuelve un objeto Number del tipo de datos integrado especificado. |
| 5 |
toString() Devuelve el valor en forma de cadena. |
| 6 |
parseInt() Analiza la cadena como tipo int. |
| 7 |
abs() Devuelve el valor absoluto del argumento. |
| 8 |
ceil() Devuelve el entero más pequeño mayor o igual (>=) que el argumento dado, de tipo double. |
| 9 |
floor() Devuelve el entero más grande menor o igual (<=) que el argumento dado. |
| 10 |
rint() Devuelve el entero más cercano al argumento. El tipo de retorno es double. |
| 11 |
round() Representaredondeo, el algoritmo esMath.floor(x+0.5), es decir, sumar 0.5 al número original y luego redondear hacia abajo. Por lo tanto, Math.round(11.5) da como resultado 12, y Math.round(-11.5) da como resultado -11. |
| 12 |
min() Devuelve el menor de los dos argumentos. |
| 13 |
max() Devuelve el mayor de los dos argumentos. |
| 14 |
exp() Devuelve el número e (base de los logaritmos naturales) elevado a la potencia del argumento. |
| 15 |
log() Devuelve el logaritmo natural (en base e) del argumento. |
| 16 |
pow() Devuelve el primer argumento elevado a la potencia del segundo argumento. |
| 17 |
sqrt() Calcula la raíz cuadrada aritmética del argumento. |
| 18 |
sin() Calcula el seno del argumento de tipo double especificado. |
| 19 |
cos() Calcula el coseno del argumento de tipo double especificado. |
| 20 |
tan() Calcula la tangente del argumento de tipo double especificado. |
| 21 |
asin() Calcula el arco seno del argumento de tipo double especificado. |
| 22 |
acos() Calcula el arco coseno del argumento de tipo double especificado. |
| 23 |
atan() Calcula el arco tangente del argumento de tipo double especificado. |
| 24 |
atan2() Convierte coordenadas cartesianas a coordenadas polares y devuelve el valor del ángulo polar. |
| 25 |
toDegrees() Convierte el argumento a grados. |
| 26 |
toRadians() Convierte ángulos a radianes. |
| 27 |
random() Devuelve un número aleatorio. |
Comparación de ejemplos de los métodos floor, round y ceil de Math
| Parámetro | 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 |
Ejemplos de floor, round y ceil:
El resultado de ejecutar el ejemplo anterior es:
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.0Otras extensiones