Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    79

    Controllo campo input BigDecimal

    Salve a tutti dovrei convertire il campo digitato in un form su un BigDecimal , se viene digitato il nr. 1,22 mi da errore il parser sulla classe java , se digito il nr. 1.22 va tutto bene.

    ESEMPIO
    BigDecimal pesoTara = null ;
    try {
    pesoTara = new BigDecimal(pesoTaraForm);
    }
    catch (NumberFormatException nfe){
    log.info("ERRORE cliente FINE");
    errors.add("pesoTara", new ActionError("errore.formatoNumero", "", ""));
    saveErrors(request,errors);
    return (mapping.findForward("emettiForm"));
    }

    Però l'utente mi chiede di poter digitare (in maniera europea) il numero la virgola di separazione dei decimali e i punti per separare le migliaia.
    Chiedo?? si può convertire la stringa (in maniera USA) prima di fare il parser,sostituendo i punti con le virgole e la virgola con in punto.



    Ringrazio anticipatamente chiunque voglia rispondermi

  2. #2
    Puoi fare un controllo in questo modo: ho supposto che l'utente possa inserire sia la notazione europea che quella USA, ipotizzando che cmq siano presenti le cifre decimali (puoi modificare tu il controllo)

    codice:
    try {
         String value = "12,345.21";    //il valore inserito
         if(value.lastIndexOf(",")==value.length()-3){   //notazione europea
              value = NumberFormat.getNumberInstance(Locale.ITALIAN).parse(value).toString();
         }else{   //notazione USA
           value = NumberFormat.getNumberInstance(Locale.US).parse(value).toString();
         }
         //value può ora essere passato come argomento del BigDecimal;
         System.out.println(value);
    } catch (ParseException ex) {
       ex.printStackTrace();
    }
    Al mio segnale... scatenate l'inferno!

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    79
    Ciao R@ve M@ster grazie per l'interessamento ho provato il tuo suggerimento

    try {
    if(pesoTaraForm.lastIndexOf(",")==pesoTaraForm.len gth()-3){ //notazione europea
    pesoTaraForm = NumberFormat.getNumberInstance(Locale.ITALIAN).par se(pesoTaraForm).toString();
    }else{ //notazione USA
    pesoTaraForm = NumberFormat.getNumberInstance(Locale.US).parse(pe soTaraForm).toString();
    }
    //value può ora essere passato come argomento del BigDecimal;
    System.out.println(pesoTaraForm);
    } catch (Exception ex) {
    ex.printStackTrace();
    }

    Il risultato non è quello giusto.
    esempi eseguiti
    Se scrivo 1,33 converte in 1.33 OK
    Se scrivo 1.233,5 converte 1.233 ERRATO valore esatto 1233.5
    Se scrivo 1234,5 converte 12345 ERRATO valore esatto 1234.5

    Io vorrei solo convertire una stringa di un numero digitato dall'utente con notazione italiana (punto x separare le migliaia)(virgola per separare i decimali) in una stringa con notazione usa(virgola per separare le migliaia)(punto per separare i decimali ) per passarla all'oggetto BigDecimal



    Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    79
    Leggendo quà e là nel forum per istanziare correttamente un BigDecimal dovrei passare una stringa con solo numeri e il punto come separatore decimale.
    Per cui dalla stringa digitata dall'utente dovrei togliere i punti e successivamente sostituire la virgola con un punto.

    Esiste un modo semplice per fare ciò?????

  5. #5
    Non ti funziona perchè ho supposto che vengano cmq espresse 2 cifre decimali (ecco perchè ho fatto -3 nella condizione). Ho usato il metodo del NumberFormat per darti la possibilità di inserire indifferentemente i due tipi di notazione.

    Se sei sicuro che l'utente inserisce sempre il formato 1.234,89 allora ti basta fare due replace sulla stringa inserita:

    codice:
    valore = valore.replaceAll("\\.","").replaceAll(",",".");
    il metodo replaceAll sostituisce tutte le occorrenze del primo parametro con il secondo parametro.

    Pertanto... iniziando da un valore = 1.234,50

    valore.replaceAll("\\.","") ----restuisce---> 1234,50

    il secondo replaceAll restituisce 1234.50

    Al mio segnale... scatenate l'inferno!

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    79
    Grazie, problema risolto !!!!!!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.