Approssimare variabile double.

di Anonimizzato15857 il
16 risposte
Salve,se ho inizializzato una variabile double che verrà da me usata come sommatore,per evitare che in output mi escano numeri del tipo 10.000000001 anzichè 10.00,come potrei fare?

16 Risposte

  • Ishima ha scritto:


    Salve,se ho inizializzato una variabile double che verrà da me usata come sommatore,per evitare che in output mi escano numeri del tipo 10.000000001 anzichè 10.00,come potrei fare?
    Se vuoi formattare in stringa il numero ad un tot di decimali (con arrotondamento), puoi usare i NumberFormat o la funzionalità di formattazione delle stringhe da Java 5 offerta dai format/printf
    Ma tieni presente che in questi casi c'entra anche la "localizzazione" (italiano, inglese ecc...) del formato.
  • andbin ha scritto:


    Ishima ha scritto:


    Salve,se ho inizializzato una variabile double che verrà da me usata come sommatore,per evitare che in output mi escano numeri del tipo 10.000000001 anzichè 10.00,come potrei fare?
    Se vuoi formattare in stringa il numero ad un tot di decimali (con arrotondamento), puoi usare i NumberFormat o la funzionalità di formattazione delle stringhe da Java 5 offerta dai format/printf
    Ma tieni presente che in questi casi c'entra anche la "localizzazione" (italiano, inglese ecc...) del formato.
    Quindi il codice da usare quale sarebbe? Si può usare direttamente in output o bisogna inizializzare la variabile?
  • Ishima ha scritto:


    Quindi il codice da usare quale sarebbe?
    import java.text.DecimalFormat;
    import java.text.NumberFormat;
    
    public class Prova {
        public static void main(String[] args) {
            double d = 10.5678;
    
            System.out.println(d);
    
            System.out.format("%.2f%n", d);     // 2 decimali. Nota: %n è il newline
    
            NumberFormat nf = new DecimalFormat("0.00");
            System.out.println(nf.format(d));
        }
    }
    Output:
    10.5678
    10,57
    10,57
    Nota due cose:
    a) L'output "localizzato" degli ultimi due, con la virgola (sul mio PC la lingua predefinita è l'italiano)
    b) L'arrotondamento effettuato.
  • andbin ha scritto:


    Ishima ha scritto:


    Quindi il codice da usare quale sarebbe?
    import java.text.DecimalFormat;
    import java.text.NumberFormat;
    
    public class Prova {
        public static void main(String[] args) {
            double d = 10.5678;
    
            System.out.println(d);
    
            System.out.format("%.2f%n", d);     // 2 decimali. Nota: %n è il newline
    
            NumberFormat nf = new DecimalFormat("0.00");
            System.out.println(nf.format(d));
        }
    }
    Output:
    10.5678
    10,57
    10,57
    Nota due cose:
    a) L'output "localizzato" degli ultimi due, con la virgola (sul mio PC la lingua predefinita è l'italiano)
    b) L'arrotondamento effettuato.
    Ok ma tu hai inizializzato la tua variabile d come 10,.... Ma nel caso di un sommatore,cioè come dovrei fare per arrotondare una volta che ha finito di sommare tutti i valori?
  • Ishima ha scritto:


    Ok ma tu hai inizializzato la tua variabile d come 10,.... Ma nel caso di un sommatore,cioè come dovrei fare per arrotondare una volta che ha finito di sommare tutti i valori?
    Non cambia nulla. Avrai comunque un valore double. Devi solo stabilire quanti decimali, quale algoritmo di arrotondamento (con i NumberFormat lo puoi specificare facilmente con setRoundingMode, da Java 6) e quale API usare (i format/printf o i NumberFormat).
  • andbin ha scritto:


    Ishima ha scritto:


    Ok ma tu hai inizializzato la tua variabile d come 10,.... Ma nel caso di un sommatore,cioè come dovrei fare per arrotondare una volta che ha finito di sommare tutti i valori?
    Non cambia nulla. Avrai comunque un valore double. Devi solo stabilire quanti decimali, quale algoritmo di arrotondamento (con i NumberFormat lo puoi specificare facilmente con setRoundingMode, da Java 6) e quale API usare (i format/printf o i NumberFormat).
    Ok,ed è possibile inserire in una textarea attraverso il settext il valore approssimato?
  • Ishima ha scritto:


    Ok,ed è possibile inserire in una textarea attraverso il settext il valore approssimato?
    Sia il format di String che di NumberFormat restituiscono String. Quindi ovviamente sì.
  • andbin ha scritto:


    Ishima ha scritto:


    Ok,ed è possibile inserire in una textarea attraverso il settext il valore approssimato?
    Sia il format di String che di NumberFormat restituiscono String. Quindi ovviamente sì.
    Grazie ma comunque continuo a non saperlo applicare,guarda un po quì:
    public class Cameriere extends javax.swing.JFrame {
    float S=0; //SOMMATORE. Dopo il sommatore verrà incrementato e alla fine restituito in output.
    ....//Cosa va?
    TextArea.setText(S);
    } 
  • Ishima ha scritto:


    Grazie ma comunque continuo a non saperlo applicare
    double val = ......
    String str = String.format("%.2f", val);
    oppure
    DecimalFormat df = new DecimalFormat("0.00");
    String str = df.format(val);
  • public class Cameriere extends javax.swing.JFrame {
        double S=0;
        double t=0;
    double c=0;
        public Cameriere() {
        DecimalFormat df = new DecimalFormat("0.00");
        String str = df.format(S);
        }
    private void jComboBox3ActionPerformed(java.awt.event.ActionEvent evt)
     {                                           
        if (jComboBox3.getSelectedItem().equals("UOVO")){
            S+=5.7;
            t+=1;
      }
    c= t + S //Non lo posso fare ma è questo ciò che m'interessa.
    }
    TextArea.setText(c);
    }
  • Ishima ha scritto:


        public Cameriere() {
        DecimalFormat df = new DecimalFormat("0.00");
        String str = df.format(S);
        }
    Non ha senso formattare il valore di S nel costruttore. In quel momento S vale 0.
  • andbin ha scritto:


    Ishima ha scritto:


        public Cameriere() {
        DecimalFormat df = new DecimalFormat("0.00");
        String str = df.format(S);
        }
    Non ha senso formattare il valore di S nel costruttore. In quel momento S vale 0.
    Ok,però poi non so come darlo nel settext una volta arrotondato e sommato
  • Ishima ha scritto:


    Ok,però poi non so come darlo nel settext una volta arrotondato e sommato
    Scusa ma queste sono super-banalità .... fai la formattazione poco prima del setText
  • andbin ha scritto:


    Ishima ha scritto:


    Ok,però poi non so come darlo nel settext una volta arrotondato e sommato
    Scusa ma queste sono super-banalità .... fai la formattazione poco prima del setText
    E poi nel settext inserisco str anzichè S giusto?
Devi accedere o registrarti per scrivere nel forum
16 risposte