Aggiungere zeri a destra

di il
21 risposte

Aggiungere zeri a destra

Ho una funzione di questo tipo:
    public String funzione(HttpServletRequest request, String Parameter){
        try {
            String strParameter = "";
            HttpSession session = request.getSession(false);
            if (session == null) {
                return "";
            }
            strParameter = (String) session.getAttribute(Parameter);
            if (strParameter != null) {
                return strParameter;
            }
            return "";
        }catch (Exception e){
            return "";
        }
    }
che fa esattamente quello che deve fare e che uso in una pagina jsp.
Vorrei però potenziarla per i numeri.
Vorrei che i numeri seguenti:
12.23
3.4556
1.2
fossero scritti con 6 cifre dopo la virgola ovvero in questo modo:
12.230000
3.455600
1.200000
Esiste già qualche funzione di java che potrei usare?
grazie

21 Risposte

  • Re: Aggiungere zeri a destra

    giannino1995 ha scritto:


    Vorrei però potenziarla per i numeri.
    Vorrei che i numeri seguenti:
    12.23
    3.4556
    1.2
    fossero scritti con 6 cifre dopo la virgola ovvero in questo modo:
    12.230000
    3.455600
    1.200000
    Alt!! Gli "attributi" nei vari "scope" (page, request, session, application) possono essere qualunque tipo di oggetto. Quindi in un attributo di sessione, cosa ti aspetti di avere per un numero? Una stringa? Un Float? Altro??
  • Re: Aggiungere zeri a destra

    Chiedo scusa, ho sbagliato funzione. In realtà la modifica delle stringhe le volevo fare in un'altra classe.
    Ho creato un metodo apposito ma non so come usarlo.
        private String toStringFormatter(Double value, String formatter){
            try {
                StringBuilder sbuf = new StringBuilder();
                Formatter fmt = new Formatter(sbuf);
                fmt.format(formatter, value);
                return sbuf.toString();
            }catch(Exception e){
                return value.toString();
            }
        }
    Cosa devo scrivere in formatter per avere un numero con segno ed n cifre dopo la virgola?
    n ovviamente appartiene a int...
  • Re: Aggiungere zeri a destra

    Ho risolto

    "%+10.nf"
  • Re: Aggiungere zeri a destra

    giannino1995 ha scritto:


                StringBuilder sbuf = new StringBuilder();
                Formatter fmt = new Formatter(sbuf);
                fmt.format(formatter, value);
                return sbuf.toString();
    
    Vuoi proprio complicarti la vita ....
  • Re: Aggiungere zeri a destra

    Hai ragione!
    grazie!
        private String f(Double value, String formatter){
            try {
                return String.format(formatter, value).replace(",",".");
            }catch(Exception e){
                return value.toString();
            }
        }
  • Re: Aggiungere zeri a destra

    giannino1995 ha scritto:


    Hai ragione!
    grazie!
        private String f(Double value, String formatter){
            try {
                return String.format(formatter, value).replace(",",".");
            }catch(Exception e){
                return value.toString();
            }
        }
    replace?? Vuoi proprio darti la zappa sui piedi ....

    Tutti i printf/format hanno una versione con Locale esplicito e una in cui viene preso il Locale di "default" della piattaforma.

    Se vuoi la forma "inglese":

    String.format(Locale.ENGLISH, formato, valori........);
  • Re: Aggiungere zeri a destra

    In questo caso il tuo codice è decisamente migliore.
    Quando invece catturo un numero da un form replace lo posso usare?
    p = Double.parseDouble(pStr.replace(',','.'));
    Se scrivo:
    p = Double.parseDouble(String.format(Locale.ENGLISH, pStr));
    il programma non mi prende i numeri con la virgola.
    Sempre grazie
  • Re: Aggiungere zeri a destra

    giannino1995 ha scritto:


    In questo caso il tuo codice è decisamente migliore.
    Se non metto il replace non riesco a riconvertire da stringa a double da un'altra parte del programma.
    Quando catturo un numero da un form replace lo posso usare?
    p = Double.parseDouble(pStr.replace(',','.'));
    Se scrivo:
    p = Double.parseDouble(String.format(Locale.ENGLISH, pStr));
    il programma non mi prende i numeri con la virgola.
    Sempre grazie
    parseDouble accetta SOLO ed esclusivamente la forma "inglese", con il punto per i decimali.

    i printf/format invece sono "localizzabili". Se vuoi localizzare anche il parsing, devi passare per i java.text.NumberFormat e sottotipo DecimalFormat


    P.S. evita replace di quel tipo, perché chi li vede capisce solo che stai facendo accrocchi e pastrocchi ...
  • Re: Aggiungere zeri a destra

    .
  • Re: Aggiungere zeri a destra

    Quindi come convertiresti una stringa ad un double senza usare il replace?
    Se un utente scrivesse +120.56 oppure +120,56 vorrei che in p finisse comunque quel valore.
  • Re: Aggiungere zeri a destra

    giannino1995 ha scritto:


    Quindi come convertiresti una stringa ad un double senza usare il replace?
    Se un utente scrivesse +120.56 oppure +120,56 vorrei che in p finisse comunque quel valore.
    Devi prima stabilire se vuoi usare la localizzazione predefinita del sistema (se è italiano, lo sa l'utente e dovrà scrivere 120,56, se inglese, lo sa di nuovo l'utente e dovrà scrivere 120.56) oppure se imponi tu un locale specifico ("utente, mi devi scrivere solo il formato inglese").
  • Re: Aggiungere zeri a destra

    Cosa ne dici di questa?
    DecimalFormat df = new DecimalFormat();
                        DecimalFormatSymbols sfs = new DecimalFormatSymbols();
                        sfs.setDecimalSeparator('.');
                        df.setDecimalFormatSymbols(sfs);
                        p = df.parse(pStr).doubleValue();
  • Re: Aggiungere zeri a destra

    andbin ha scritto:


    giannino1995 ha scritto:


    Quindi come convertiresti una stringa ad un double senza usare il replace?
    Se un utente scrivesse +120.56 oppure +120,56 vorrei che in p finisse comunque quel valore.
    Devi prima stabilire se vuoi usare la localizzazione predefinita del sistema (se è italiano, lo sa l'utente e dovrà scrivere 120,56, se inglese, lo sa di nuovo l'utente e dovrà scrivere 120.56) oppure se imponi tu un locale specifico ("utente, mi devi scrivere solo il formato inglese").
    No, io non impongo nulla, vorrei che il mio programma funzionasse sempre e quindi vorrei poter convertire da double a string e viceversa all'occorrenza.
  • Re: Aggiungere zeri a destra

    giannino1995 ha scritto:


    No, io non impongo nulla
    Se consideri il Locale predefinito, allora sarà l'utente che dovrà sapere quale è la localizzazione predefinita della sua macchina. Se italiano scriverà 123,45, se inglese 123.45 ecc...

    E quindi:

    NumberFormat nf = NumberFormat.getInstance();

    e lo dovrai usare sia per il parsing che il format.

    C'è una questione sul parse con i NumberFormat che sicuramente non sai. La documentazione in modo un po' "sibillino" lo dice: The method may not use the entire text of the given string
    Vuol dire che se vuoi un parsing ben "stretto" devi usare l'altro parse, quello che riceve ParsePosition e verificare che abbia parsato TUTTA la stringa e non solo una parte.
Devi accedere o registrarti per scrivere nel forum
21 risposte