Operazione Stringa

di Anonimizzato20038 il
9 risposte
Buon Giorno volevo un aiuto, io ottengo dei Dati da un database con JsonObject e sono in formato stringa in pratica ho un campo del database che è ancora in lire e devo trasformarlo in euro

per capire volevo fare una prova prima trtasformando la stringa in double per poi ritrasformarla in stringa(non mi ricordo se si possono fare le operazioni direttamante sulle stringhe):
 JSONObject datum = (JSONObject) data.get(i);
                              
                                double prezzolire = (Double.parseDouble(datum.getString("costo")))/1936.24 ;
                               
                                String costo = prezzolire;
Ditemi se erro ma appunto Json trasforma tutto in stringa?Come fareste voi? questi dati a sua volta devono essere immessi in una ReciclerView .

9 Risposte

  • Ho fatto una cosa del genere secondo voi puo essere fatto meglio?
    double prezzolire = (Double.parseDouble(datum.getString("costo")))/1936.24 ;
                                    String costo = Double.toString(prezzolire);
  • nio74 ha scritto:


    ho fatto una cosa del genere secondo voi puo essere fatto meglio?
    double prezzolire = (Double.parseDouble(datum.getString("costo")))/1936.24 ;
                                    String costo = Double.toString(prezzolire);
    Tecnicamente è ok. Se quello non è l'unico punto, puoi incapsulare questa logica di string->double/conversione/double->string in un metodo apposito, che riceve String e restituisce String.
  • Comunque, ad essere precisi, 1 euro vale 1936,27 lire.
  • andbin ha scritto:


    nio74 ha scritto:


    ho fatto una cosa del genere secondo voi puo essere fatto meglio?
    double prezzolire = (Double.parseDouble(datum.getString("costo")))/1936.24 ;
                                    String costo = Double.toString(prezzolire);
    Tecnicamente è ok. Se quello non è l'unico punto, puoi incapsulare questa logica di string->double/conversione/double->string in un metodo apposito, che riceve String e restituisce String.
    Infatti farò cosi grazie
  • candaluar ha scritto:


    Comunque, ad essere precisi, 1 euro vale 1936,27 lire.
    Grazie andavo a memoria,bei tempi la Lira
  • nio74 ha scritto:


    Infatti farò cosi grazie
    Qualcosa tipo:
    public static String lireToEuro(String lireString) {
        double lire = Double.parseDouble(lireString);
        double euro = lire / 1936.27;
        return Double.toString(euro);
    }
    Puoi anche aggiungere logica particolare, es. se lireString è null, restituisce subito null (o lancia una eccezione ... dipende come vuoi gestire la cosa).
  • andbin ha scritto:


    nio74 ha scritto:


    Infatti farò cosi grazie
    Qualcosa tipo:
    public static String lireToEuro(String lireString) {
        double lire = Double.parseDouble(lireString);
        double euro = lire / 1936.27;
        return Double.toString(euro);
    }
    Puoi anche aggiungere logica particolare, es. se lireString è null, restituisce subito null (o lancia una eccezione ... dipende come vuoi gestire la cosa).

    Ho seguito il tuo suggerimento e ho fatto cosi:

    Ho creato una Classe chiamata Servizi , dove andro a implementare metodi che mi potranno essere appunto di servizio,e ho implementato questo metodo:
    public static String lireToEuro(String lireString)
        {
            double lire = Double.parseDouble(lireString);
            double euro = Math.floor((lire / 1936.27)*100)/100;
            return Double.toString(euro);
        }
    Per poi usarlo in questa maniera:
    JSONArray data = response.getJSONArray("tabripa");
                                for (int i=0; i<data.length(); i++)
                                {
                                    JSONObject datum = (JSONObject) data.get(i);
                                 
                                    //Converto la stringa costo in double richiamando il metodo lireToEuro della classe Servizi
                                    String costo = new Servizi().lireToEuro(datum.getString("costo"));
                                    
                                    String codice = datum.getString("codice");
                                    Busta busta = new Busta(codice,costo);
    
                                    arrayList.add(busta);
                                }
    
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
    Grazie dei consigli e accetto volentieri critiche costruttive.
  • nio74 ha scritto:


            double euro = Math.floor((lire / 1936.27)*100)/100;
    Il troncamento a 2 decimali ovviamente è ok!

    nio74 ha scritto:


    String costo = new Servizi().lireToEuro(datum.getString("costo"));
    Servizi è solo una classe con metodi di "utilità" (tipicamente static) ? Se sì, NON serve istanziarla.
    Nelle classi con solo metodi statici di utilità, tipicamente si mette il costruttore "privato", in modo che nessuno sia tentato di istanziare la classe.

    private Servizi() {}


    Quindi per usarla:
    String costo = Servizi.lireToEuro(datum.getString("costo"));
  • andbin ha scritto:


    nio74 ha scritto:


            double euro = Math.floor((lire / 1936.27)*100)/100;
    Il troncamento a 2 decimali ovviamente è ok!

    nio74 ha scritto:


    String costo = new Servizi().lireToEuro(datum.getString("costo"));
    Servizi è solo una classe con metodi di "utilità" (tipicamente static) ? Se sì, NON serve istanziarla.
    Nelle classi con solo metodi statici di utilità, tipicamente si mette il costruttore "privato", in modo che nessuno sia tentato di istanziare la classe.

    private Servizi() {}


    Quindi per usarla:
    String costo = Servizi.lireToEuro(datum.getString("costo"));
    Grazie hai ragione gentilissimo come sempre.
Devi accedere o registrarti per scrivere nel forum
9 risposte