float/int conversione implicita

Sto facendo la moltiplicazione e la divisione di floats e ints e mi dimentico le regole di conversione implicita (e le parole in questione sembra troppo vaga per google più rapidamente che chiedere qui).

Se ho due ints, ma voglio fare floating-point divisione, ho bisogno solo di gettare uno o entrambi gli operandi? Come per la moltiplicazione, se io moltiplicare una float e un int, è la risposta di un float?

  • BTW, si dovrebbe essere in grado di scrivere <10 linee di metodo Java che prove di questo per voi.
  • d’accordo, ma non ho un modo rapido e sporco test harness per questo, perché l’unica cosa che io abbia mai fare con Java, è quello di creare i progetti Android in Eclipse, quindi non vorrei anche sapere (senza guardare in su come creare una semplice linea cmd app in Java. Più veloce a chiedere qui e di ottenere una risposta in pochi secondi, mentre io continuo a lavorare. =)
  • Ma ora tutti sulla terra non sono a prova di questo.
InformationsquelleAutor Rich | 2010-11-04

 

6 Replies
  1. 33

    Non è possibile assegnare a un int il risultato della divisione di un float da un int o viceversa.

    Così le risposte sono:

    Se ho due ints, ma voglio fare la divisione in virgola mobile…?

    Un cast è abbastanza.

    Se ho moltiplicare una float e un int, è la risposta di un float?

    Sì.


    float f = 1000f;
    int i = 3; 
    
    f = i; //Ok
    i = f; //Error
    
    f = i/f; //Ok 0.003
    f = f/i; //Ok 333.3333(3)
    
    i = i/f; //Error
    i = f/i; //Error
  2. 11

    Dimostrare:

     int i1 = 5;
     float f = 0.5f;
     int i2 = 2;
     System.out.println(i1 * f);
     System.out.println(i1 / i2);
     System.out.println(((float) i1) / i2);

    Risultato:

    2.5
    2 
    2.5
  3. 7

    Per eseguire qualsiasi tipo di aritmetica a virgola mobile con numeri interi, è necessario convertire (leggi: cast) almeno uno degli operandi di un float tipo.

  4. 7

    Se almeno uno degli operandi di un
    l’operatore binario è di virgola mobile
    tipo, allora l’operazione è un
    operazione della virgola mobile, anche se il
    altri è parte integrante.

    (Fonte: Linguaggio Java specifiche – 4.2.4)

    se ho moltiplicare un float e un int, è la risposta di un galleggiante?

    System.out.println(((Object)(1f*1)).getClass());//class java.lang.Float

    (Se si utilizza DrJava, si può semplicemente digitare ((Oggetto)(1f*1)).getClass() in interazioni pannello. C’è un plugin per DrJava per Eclipse troppo.)

  5. 5

    La risposta più semplice è che Java eseguire conversioni di ampliamento automaticamente ma non conversioni di restrizione. Così, per esempio, int->float è automatica, ma float->int richiede un cast.

  6. 0

    Java classifica i tipi primitivi in ordine int < long < float < double. Se un operatore è utilizzato con diversi tipi primitivi, il tipo che appare prima che l’altro nell’elenco di cui sopra potrà essere convertito implicitamente l’altro, senza alcun compilatore di diagnostica, anche nei casi in cui questo si tradurrebbe in una perdita di precisione. Per esempio, 16777217-1.0f sarà resa 16777215.0 f (uno in meno rispetto al valore corretto). In molti casi, le operazioni tra un float e un int al di fuori dell’intervallo di +/-16777216 deve essere eseguita da casting la int per double, di eseguire l’operazione, e poi, se necessario–casting il risultato di float. Trovo che il requisito per il doppio casting fastidioso, ma il typecasting regole in Java richiede che uno sia di utilizzare il fastidioso doppio cast o di subire la perdita di precisione.

Lascia un commento