Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 28
  1. #1

    [JAVA] Cifre decimali in eccesso.

    Salve!
    Ho creato un programmino che converte le vecchie Lire in Euro. Nel codice ovviamente specifico che le lire sono di tipo "int" e che il loro valore va poi convertito in tipo "double" per l'euro. Solo che quando effettuo la conversione il risultato che è ottengo include tutte e 15 le cifre decimali del tipo "double"... C'è un modo per evitarlo?
    Grazie anticipatamente!
    I'm going under (going under)
    Drowning in you (drowning in you)
    I'm falling forever (falling forever)
    I've got to break through
    I'm going under

    { GOING UNDER - Evanescence }

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    non so se hai mai utilizzato NumberFormat, annessi e connessi... comunque, prova questo semplice programmino, e prendi spunto

    Comunque, se cerchi nel sito della sun trovi qualcosa (non spiegato benissimo...) sulla formattazione dei numeri (anche valuta).

    codice:
    import java.text.*;
    
    public class euroConversion {
      
      
      DecimalFormatSymbols unusualSymbols = new DecimalFormatSymbols();
      
      private static final double euro = 1936.27;
      String converted;
      
      public euroConversion(long lira) {
        unusualSymbols.setDecimalSeparator(',');
        unusualSymbols.setGroupingSeparator('.');
        DecimalFormat myFormat = new DecimalFormat("€###,###.##", unusualSymbols);
        converted = myFormat.format((double)(lira/euro));
      }
      
      public static void main (String args[]) {
        euroConversion eu1 = new euroConversion(100000000);
        System.out.println(eu1.converted);
        euroConversion eu2 = new euroConversion(1000);
        System.out.println(eu2.converted);
      }
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    No in effetti non ho mai usato questa classe (ho praticamente appena cominciato a dare un'occhiata alla classe Math e suoi simili).
    Vediamo un po' se ho capito... Tu in pratica hai creato un costruttore che indicasse al programma la "struttura del numero da visualizzare", giusto? Dopo di che hai generato un oggetto che contenesse quella specifica 'struttura'... esatto?
    E' un po' complicato come passaggio però Davvero non c'è nulla di più semplice? Voglio dire: io ad esempio sono andata a dare uno sguardo qui e mi pare di aver adocchiato alcuni metodi per l'arrotondamento delle cifre decimali... Sbaglio io? Potrebbero essermi utili? (comunque intanto grazie per la risposta! ^__^ )
    I'm going under (going under)
    Drowning in you (drowning in you)
    I'm falling forever (falling forever)
    I've got to break through
    I'm going under

    { GOING UNDER - Evanescence }

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    codice:
    DecimalFormatSymbols unusualSymbols = new DecimalFormatSymbols();
    Questo mi serve per poter successivamente cambiare il punto decimale con la virgola, e la virgola (che si usa per i gruppi di cifre nel mondo anglosassone) con il nostro punto.

    codice:
    public euroConversion(long lira) {
        unusualSymbols.setDecimalSeparator(',');
        unusualSymbols.setGroupingSeparator('.');
        DecimalFormat myFormat = new DecimalFormat("€###,###.##", unusualSymbols);
        converted = myFormat.format((double)(lira/euro));
      }
    1° riga: setto il separatore decimale (voglio la virgola)

    2° riga: setto il separatore di gruppi di cifre (voglio il punto)

    3° riga: dichiaro il mio formato -> voglio il simbolo di €, ###,### dice come saranno raggruppate le cifre e infine .## dice che voglio due cifre decimali Uso anche l'altro argomento del costruttore, ossia passo le mie customizzazioni che ho precedentemente dichiarato (inversione di punto e virgola)

    4° riga: applico finalmente il mio pattern, nota che torna una stringa.

    Il link che mi hai dato tu manda alle api di java, ossia la lista di tutte le classi e interfacce standard... che cosa stavi guardando in particolare?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    In effetti ora è ancora più chiaro o.O ... Solo una domanda: i metodi come "setDecimalSeparator" e simili li hai creati tu oppure appartengono alla classe predefinita Number Format?

    Comunque parlavo dei metodi elencati nel FIELD SUMMARY, come ROUND_DOWN, ROUND_FLOOR eccetera. Non sono metodi, quelli? O.o (poco esperta...)

    Comunque, a titolo di cronaca la classe Number Format l'ho trovata. Ma non so quali metodi applicare, ecco perché ti domandavo se quelli su citati li hai creati tu o meno. Perché non li ho visti qui ?_?
    I'm going under (going under)
    Drowning in you (drowning in you)
    I'm falling forever (falling forever)
    I've got to break through
    I'm going under

    { GOING UNDER - Evanescence }

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    no, quei due metodi che non hai trovato sono della classe DecimalFormatSymbols (vedi che ho dichiarato il mio oggetto di quel tipo poco più su, fuori dal costruttore?).
    Il link che hai postato adesso punta a bigdecimal, prima alla root delle api
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Ah ok, scusami! Pensavo fosse una classe predefinita da te! ^^;
    Comunque del link che ti ho postato ora (che mi pare di aver capito che ora è corretto.. giusto? O.o) non contiene nulla di utile per l'arrotondamento? :\
    I'm going under (going under)
    Drowning in you (drowning in you)
    I'm falling forever (falling forever)
    I've got to break through
    I'm going under

    { GOING UNDER - Evanescence }

  8. #8
    Invece di definire un nuovo NumberFormat puoi usare quello di default (Java restituisce il formato appropriato a seconda del "contesto locale", quindi gli euri in Italia, i talleri negli Stati Uniti... Almeno ci prova!!!) con la funzione getCurrencyInstance() della classe NumberFormat.
    Se vuoi assicurarti che venga sempre restituita la valuta in uso in Italia usi l'altra versione della funzione che prende come parametro il "Locale" desiderato:

    codice:
    euri = NumberFormat.getCurrencyInstance(Locale.ITALY)
    Altro metodo: se le lire sono in formato intero, allora puoi convertirli in eurocent, ancora interi. Dagli eurocent, poi, tiri fuori una stringa che visualizza la cifra nel fomato "euri.centesimi".
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  9. #9
    Uhm... già questo mi sembra meglio ancora.

    Il programmino che ho scritto io è questo:

    codice:
    import javax.swing.JOptionPane;
    public class LireEuro
    {
    
    private int x;
    
    
    
      // metodo per la conversione da Lire ad Euro
      public static double convertiLireEuro(int x)
      {
         double euro = x / 1936.27;
         return euro;
      }
    
    
    
      // ***********************
      // Applicazione del metodo.
     public static void main (String[] args){
      {
          String x = JOptionPane.showInputDialog("Inserisci un valore in Lire:");
          int lire = Integer.parseInt(x);
          
          double conversione = convertiLireEuro(lire);        
          System.out.println("La conversione in EURO è pari a: " + conversione + "€. Bye!");
          
          System.exit(0);
      }
    }
    }
    Potrei quindi applicare quella porzione di codice che mi hai ritrascritto tu alla variabile "conversione"? ?_?
    E una domanda che mi è venuta in mente oggi: sbaglio a dichiarare private "int x"? O.o
    I'm going under (going under)
    Drowning in you (drowning in you)
    I'm falling forever (falling forever)
    I've got to break through
    I'm going under

    { GOING UNDER - Evanescence }

  10. #10
    Scusa ma quella x che hai dichiarato quando la usi?!?

    P.S. M'e' venuto il dubbio che con Locale.ITALY invece degli euri escano le lire... Boe...
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.