Domanda

Nel programma qui di seguito, il risultato è che 0.0 è considerato meno di Double.MIN_VALUE. Perché?

Abbiamo una soluzione (lavoro con Doubles solo ed uso compareTo) e voglio capire perché sta fallendo unboxing qui.

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
  }
}
È stato utile?

Soluzione

Secondo il Javadocs :

MIN_VALUE

Una costante che tiene il più piccolo valore diverso da zero positivo di tipo double, 2 -1074 .

In altre parole, è più grande di 0.

Altri suggerimenti

Si dovrebbe leggere il Double.MIN_VALUE specifica. Si tratta di un minimo possibile, ma valore Double positiva che significa che è più grande di 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 che è ancora un numero positivo. Penso che si sta cercando min = - Double.MAX_VALUE

Secondo me autoboxing non ha problemi. Forse è sufficiente usare qualcosa come Double.NEGATIVE_INFINITY o Double.POSITIVE_INFINITY che dovrebbe funzionare bene con i operatori. Per esempio nota che

-Double.MAX_VALUE > Double.NEGATIVE_INFINITY
è vero!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top