Pourquoi autoboxing / unboxing défaut ici?
-
22-10-2019 - |
Question
Dans le programme ci-dessous, le résultat est que 0.0
est considéré comme inférieur à Double.MIN_VALUE
. Pourquoi?
Nous avons une solution (travail avec Doubles
seulement et l'utilisation compareTo
) et je veux comprendre pourquoi unboxing est un échec ici.
import java.util.Date;
import java.util.Calendar;
import java.math.BigDecimal;
public class Test {
public static void main(String[] args) {
double max = 99999.9999;
double min = Double.MIN_VALUE;
Double test = 0.0;
System.out.println(max > test); // expect true; is true
System.out.println(test > min); // expect true; is false
}
}
La solution
Selon le Javadocs :
MIN_VALUE
Une constante de maintien la plus petite valeur non nulle positive du type à double, 2 -1074 .
En d'autres termes, il est plus grand que 0.
Autres conseils
Vous devriez lire le Double.MIN_VALUE spécification. Il est un minimum possible mais la valeur double positif qui signifie qu'il est plus grand que 0,0.
A constant holding the smallest positive nonzero value of type double, 2-1074.
It is equal to the hexadecimal floating-point literal 0x0.0000000000001P-1022
and also equal to Double.longBitsToDouble(0x1L).
Double.MIN_VALUE = 4.9E-324
qui est toujours un nombre positif. Je pense que vous cherchez min = - Double.MAX_VALUE
Selon moi autoboxing n'a pas de problème.
Peut-être vous avez simplement besoin d'utiliser quelque chose comme Double.NEGATIVE_INFINITY ou Double.POSITIVE_INFINITY qui devrait bien fonctionner avec les opérateurs
-Double.MAX_VALUE > Double.NEGATIVE_INFINITYest vrai!