Precedente :: Successivo |
Autore |
Messaggio |
ZioCrick Eroe in grazia degli dei

Registrato: 19/05/19 11:20 Messaggi: 85
|
Inviato: 27 Feb 2025 15:15 Oggetto: 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:
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 |
|
 |
SverX Supervisor Macchinisti


Registrato: 25/03/02 12:16 Messaggi: 11802 Residenza: Tokelau
|
Inviato: 05 Mar 2025 10:45 Oggetto: |
|
|
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 |
|
 |
ZioCrick Eroe in grazia degli dei

Registrato: 19/05/19 11:20 Messaggi: 85
|
Inviato: 07 Mar 2025 13:39 Oggetto: |
|
|
Grazie per le indicazioni.
Questa settimana sono presissimo.
Dalla prossima spero di avere più tempo per fare un po' di prove. |
|
Top |
|
 |
SverX Supervisor Macchinisti


Registrato: 25/03/02 12:16 Messaggi: 11802 Residenza: Tokelau
|
Inviato: 07 Mar 2025 16:51 Oggetto: |
|
|
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 |
|
 |
ZioCrick Eroe in grazia degli dei

Registrato: 19/05/19 11:20 Messaggi: 85
|
Inviato: 22 Mar 2025 11:17 Oggetto: |
|
|
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 |
|
 |
SverX Supervisor Macchinisti


Registrato: 25/03/02 12:16 Messaggi: 11802 Residenza: Tokelau
|
Inviato: 24 Mar 2025 11:23 Oggetto: |
|
|
bene che hai trovato una soluzione!
ma sai che mi era sfuggito che avevi un campo float nel database per memorizzare un valore monetario?
sarebbe meglio evitare il float per questo tipo di informazioni - usa un decimal
 |
|
Top |
|
 |
ZioCrick Eroe in grazia degli dei

Registrato: 19/05/19 11:20 Messaggi: 85
|
Inviato: 24 Mar 2025 11:42 Oggetto: |
|
|
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ì.
L'importante è aver scoperto che esistono, così nel caso ne avessi la necessità li userò sicuramente.  |
|
Top |
|
 |
|