Formattare correttamente un float

di il
7 risposte

Formattare correttamente un float

Buongiorno,
ho il seguente problema.
Sviluppo in Java su un pc impostato con la lingua di sistema in Inglese.
Voglio visualizzare, in una JTextField, un valore prelevato da un campo float di un db MySql, formattandolo nel formato italiano, quindi con il carattere virgola "," come separatore dei decimali e il punto "." come separatore delle migliaia.
Inoltre vorrei che mi visualizzasse sempre e solo 2 decimali e se non presenti devono essere ,00.
Esempi: 
23.4          ->      23,40
512           ->    512,00
3248.678 -> 3.248,69

fValue è la variabile float contenente il valore da formattare;
se uso:

NumberFormat itFrmt = NumberFormat.getInstance(Locale.ITALY);
String sEuro = itFrmt.format(fValue);

me lo formatta correttamente come caratteri di virgola e migliaia, ma mette i decimali come vuole lui, ovvero 3 o 4 oppure nessuno se il valore non li avesse.


Se invece uso:

DecimalFormat sdf = new java.text.DecimalFormat("#.##0,00");
String sEuro = sdf.format(fValue);

mi da l'errore: 
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Malformed pattern "#.##0,00"

Qualche indicazione utile?

7 Risposte

  • Re: Formattare correttamente un float

    Ciao, 

    Così ?

     	DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.ITALY);
        symbols.setDecimalSeparator(',');
        symbols.setGroupingSeparator('.');
    
        DecimalFormat df = new DecimalFormat("#,##0.00", symbols);
        String sEuro = df.format(fValue);

    Oppure ?

        DecimalFormat df = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(java.util.Locale.ITALY));
        String sEuro = df.format(fValue);
    
  • Re: Formattare correttamente un float

    Ziocrick... nella costante del formato devi sempre usare il formato anglosassone con ul punto decimale

    #,##0.00

  • Re: Formattare correttamente un float

    27/02/2025 - By65Franco ha scritto:

    Così ?

     	DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.ITALY);
        symbols.setDecimalSeparator(',');
        symbols.setGroupingSeparator('.');
    
        DecimalFormat df = new DecimalFormat("#,##0.00", symbols);
        String sEuro = df.format(fValue);

    Oppure ?

        DecimalFormat df = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(java.util.Locale.ITALY));
        String sEuro = df.format(fValue);
    

    Grandioso Franco!   Funziona in entrambe i modi! ;-)

    In tutte le mie ricerche sul web non avevo mai trovato l'uso della DecimalFormatSymbols ma solo di NumberFormat e DecimalFormat ma senza il secondo argomento.

    Grazie mille! :=)

    L'unica cosa è che se inserisco un numero con più di 6 cifre significative me lo arrotonda alla sesta, 

    Es: il numero 12.3456,78 diventa 12.3457,00

    ma mi è venuto il sospetto che dipenda dal tipo di variabile float di MySql.
    Devo indagare.

    27/02/2025 - oregon ha scritto:

    Ziocrick... nella costante del formato devi sempre usare il formato anglosassone con ul punto decimale

    #,##0.00

    Se ti riferisci al mio uso della DecimalFormat se metto la stringa "#,##0.00" mi formatta in americano, se invece aggiungo la new DecimalFormatSymbols come indicato da Franco funziona. 

  • Re: Formattare correttamente un float

    Dovrebbe dipendere dal tipo in MySql , dovresti,se puoi, impostarlo a decimal.

    Altrimenti lo lasci a Float e lo trasformi in bigdecimal prima della formattazione... i tipi float e double non hanno una precisione "precisa" ;-)

    per esempio:

    BigDecimal bdValue = new BigDecimal(fValue).setScale(2, RoundingMode.HALF_UP);

    .
    Verifica il tipo di arrotondamento...  RoundingMode.HALF_UP è di tipo matematico sopra sotto il 5, mentre RoundingMode.CEILING sempre per eccesso,etc...

    sul web non avevo mai trovato l'uso della DecimalFormatSymbols ma solo di NumberFormat e DecimalFormat

    più o meno prova a vedere qui : 
    https://learn.microsoft.com/en-us/dotnet/api/java.text.decimalformatsymbols?view=net-android-34.0
    https://learn.microsoft.com/en-us/dotnet/api/java.text.decimalformat.-ctor?view=net-android-34.0

  • Re: Formattare correttamente un float

    27/02/2025 - By65Franco ha scritto:

    Dovrebbe dipendere dal tipo in MySql , dovresti,se puoi, impostarlo a decimal.

    MITICO!!!! Il decimal funziona!!!! 
    Tra l'altro si possono impostare il numero di cifre e il numero di decimali! Grandioso!

    Ho fatto poche prove ma sembra che sia la soluzione più semplice.

    Adesso sono presissimo per altro ma appena ho un po' più di tempo approfondisco le differenze tra decimal, float e double, e guardo anche i link che mi hai indicato perché non sapevo che si potesse impostare il tipo di arrotondamento.

    Grazie mille Franco!  Pizza pagata. ;-)

  • Re: Formattare correttamente un float

    Ciao, 

    ti riferisci al bigdecimal  ?  

    Esempio... più o meno una cosa del genere:

    import java.math.BigDecimal;
    import java.math.RoundingMode;
    import java.text.DecimalFormat;
    import java.text.DecimalFormatSymbols;
    import java.util.Locale;
    
    
    	// Convert to BigDecimal and round 2 decimal number
    	BigDecimal bigValue = new BigDecimal(fValue).setScale(2, RoundingMode.HALF_UP);
    
    	// Create italian format
    	DecimalFormat df = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(java.util.Locale.ITALY));
    
    	// Return value
    	String sEuro = df.format(bigValue);
    • vedere:
      • BigDecimal
        • setScale
          • RoundingMode

    .
    [Note]
    per la pizza basta che ci siano i capperi e accompagnata con CocaCola  ;-)   ty.

  • Re: Formattare correttamente un float

    01/03/2025 - By65Franco ha scritto:

    Ciao, 

    ti riferisci al bigdecimal  ?  

    No, intendevo che usando il tipo decimal si possono impostare il numero di cifre totali e il numero di cifre decimali nel campo Lunghezza/Valori.

    Per esempio impostando 10,2 si hanno 10 cifre in totale e 2 decimali.

    Sui bigdecimal farò le prove appena riesco ad avere un po di tempo . 

    01/03/2025 - By65Franco ha scritto:

    [Note]
    per la pizza basta che ci siano i capperi e accompagnata con CocaCola  ;-)   ty.

    Per i capperi non c'è problema! Per la Coca vedi tu, la salute è tua. Io non l'ho mai voluta bere in tutta la mia vita!  ;-)

Devi accedere o registrarti per scrivere nel forum
7 risposte