Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
Formattare correttamente un float
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
ZioCrick
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 19/05/19 11:20
Messaggi: 85

MessaggioInviato: 27 Feb 2025 15:15    Oggetto: Formattare correttamente un float Rispondi citando

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:

Codice:
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:

Codice:
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?
Top
Profilo Invia messaggio privato HomePage
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 12:16
Messaggi: 11802
Residenza: Tokelau

MessaggioInviato: 05 Mar 2025 10:45    Oggetto: Rispondi citando

la documentazione è qui e secondo me il formato che vuoi tu è:
Codice:
DecimalFormat("#.00");

oppure
Codice:
DecimalFormat("#,00");

se quello sopra ti restituisce il punto invece della virgola

se non ne vieni a capo così, potresti sempre generare una stringa e sostituire le virgole e i punti in un secondo passaggio...
Top
Profilo Invia messaggio privato HomePage
ZioCrick
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 19/05/19 11:20
Messaggi: 85

MessaggioInviato: 07 Mar 2025 13:39    Oggetto: Rispondi citando

Grazie per le indicazioni.
Questa settimana sono presissimo.
Dalla prossima spero di avere più tempo per fare un po' di prove.
Top
Profilo Invia messaggio privato HomePage
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 12:16
Messaggi: 11802
Residenza: Tokelau

MessaggioInviato: 07 Mar 2025 16:51    Oggetto: Rispondi citando

nota che se vuoi anche il separatore delle migliaia, allora probabilmente il formato sarà
Codice:
DecimalFormat("#.##0,00")

ma ti troverai i punti e le virgole scambiati se il tuo locale è settato su anglosassone - a questo punto ti conviene prendere quello che ottieni e vedere se c'è una funzione per sostituire multiple occorrenze di multiple sottostringhe e quindi scambiarli entrambi.
Top
Profilo Invia messaggio privato HomePage
ZioCrick
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 19/05/19 11:20
Messaggi: 85

MessaggioInviato: 22 Mar 2025 11:17    Oggetto: Rispondi citando

Aggiornamento.

Dopo svariate prove e tentativi ho scoperto che nella tabella del db bisogna impostare il campo Lunghezza in questo modo 10,2 dove il 10 indica il numero massimo di cifre significative e il 2 indica il numero di decimali, e le variabili float del bd devono essere gestite da variabili double in Java

Poi sono arrivato a due soluzioni funzionanti in cui doValue è la variabile double prelevata dal db.

Una è questa
Codice:
    NumberFormat nf = NumberFormat.getInstance(Locale.ITALIAN);
    nf.setMaximumFractionDigits(2);
    nf.setMinimumFractionDigits(2);
    String sEuro = nf.format(doValue);


E l'altra è questa:
Codice:
   BigDecimal bd = new BigDecimal(doValue).setScale(2, RoundingMode.HALF_UP);
   DecimalFormat df = new DecimalFormat("#,##0.00", new DecimalFormatSymbols(java.util.Locale.ITALY));
   String sEuro = df.format(bd);
Top
Profilo Invia messaggio privato HomePage
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 12:16
Messaggi: 11802
Residenza: Tokelau

MessaggioInviato: 24 Mar 2025 11:23    Oggetto: Rispondi citando

bene che hai trovato una soluzione!

ma sai che mi era sfuggito che avevi un campo float nel database per memorizzare un valore monetario? Shocked

sarebbe meglio evitare il float per questo tipo di informazioni - usa un decimal

Ciao
Top
Profilo Invia messaggio privato HomePage
ZioCrick
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 19/05/19 11:20
Messaggi: 85

MessaggioInviato: 24 Mar 2025 11:42    Oggetto: Rispondi

Si certo, nelle mie ricerche poi ho scoperto anche i Decimal e li ho provati, solo che ho scoperto anche che per gestire i Decimal di MySql in java bisogna usare i java.math.BigDecimal che mi complicava il codice e allora visto che anche con i float posso impostare il numero di decimali, per ora proseguo così. Smile

L'importante è aver scoperto che esistono, così nel caso ne avessi la necessità li userò sicuramente. Wink
Top
Profilo Invia messaggio privato HomePage
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 2 ore
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi