Autore Topic: float e decimali  (Letto 865 volte)

Offline Kris

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
float e decimali
« il: 08 Settembre 2013, 17:02:55 CEST »
0
Stò utilizzando il tipo dati float per recuperare dati (es: 0.0) ma ho un problema con le cifre dopo la virgola e cioè, a volte le cifre dopo la virgola non sono 1/2 ma molte di più.

Es. con un valore di questo tipo 123,45 ottengo 123,3896541

Io devo avere sempre 2 cifre dopo la virgola e non devono essere arrotondate, che mi consigliate di fare?? utilzzare BigDecimal?? un esempio??
Grazie

Offline elfo83

  • Utente normale
  • ***
  • Post: 287
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:float e decimali
« Risposta #1 il: 08 Settembre 2013, 19:44:32 CEST »
0
Prova questo metodo, ti restituisce una stringa formattata.

Codice (Java): [Seleziona]
private String formatAmount(Float amount)
        {
                DecimalFormat formatter = new DecimalFormat("###,###,##0.00");
            return formatter.format(amount);
        }


Offline Kris

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
Re:float e decimali
« Risposta #2 il: 08 Settembre 2013, 19:56:05 CEST »
0
Non sono molto pratico, come setto la miaTextView dove dentro c'è il risultato di una query??e dovrei mettere anche il separatore delle migliaia.
Codice (Java): [Seleziona]
miaTextView.setText(c.getString(0));

Offline elfo83

  • Utente normale
  • ***
  • Post: 287
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:float e decimali
« Risposta #3 il: 09 Settembre 2013, 16:33:15 CEST »
0
Cerca di spiegarti meglio che non ho capito, magari con un esempio pratico

Offline Kris

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
Re:float e decimali
« Risposta #4 il: 09 Settembre 2013, 19:44:45 CEST »
0
Ad esempio con questa query
Codice (Java): [Seleziona]
private void calcolaAnno(){
                Calendar calendar = Calendar.getInstance();
                int anno = calendar.get(Calendar.YEAR);
                int nMese = calendar.get(Calendar.MONTH)+1;
                String mese;
                if (nMese < 10){
                        mese = "0"+nMese;
                } else {
                        mese = ""+nMese;
                }
                SQLiteDatabase db = mHelper.getReadableDatabase();
                String sql = "SELECT SUM(en)-SUM(us) FROM Ge WHERE "+Ge.DATA+" LIKE '"+anno+"%' ;";
                Cursor c = db.rawQuery(sql, null);
               
                if (c.moveToFirst()){
                        aTotale.setText(c.getString(0));
                }
               

Offline elfo83

  • Utente normale
  • ***
  • Post: 287
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:float e decimali
« Risposta #5 il: 10 Settembre 2013, 02:34:09 CEST »
0
Aspetta aspetta, cosa ti aspetti dal cursore quando vai a fare  c.getString(0)? Sei sicuro che stai prendendo una stringa?

dato che devi formattare il tutto, puoi prima trasformare la stringa in Float:
Codice (Java): [Seleziona]
Float fl = Float.valueOf(c.getString(0).toString())
poi formatti:
Codice (Java): [Seleziona]
String result = formatAmount(fl)
e poi l'assegni alla tua textview:
Codice (Java): [Seleziona]
 aTotale.setText(fl);
« Ultima modifica: 10 Settembre 2013, 02:38:10 CEST da elfo83 »

Offline Kris

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
Re:float e decimali
« Risposta #6 il: 11 Settembre 2013, 19:36:08 CEST »
0
Ho trovato la classe BigDecimal (quello che devo visualizzare è la moneta con il formato di ogni paese)
Attualmente le mie txtview sono settate a float,
ti chiedo è fattibile passare da float a BigDecimal?? o non è il modo corretto??

Offline elfo83

  • Utente normale
  • ***
  • Post: 287
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:float e decimali
« Risposta #7 il: 12 Settembre 2013, 16:22:36 CEST »
0
Onestamente fino ad ora bigdecimal non l'ho mai utilizzato, quindi non posso dirti un gran che. Se vuoi utilizzare il sistema che ti ho suggerito puoi creare lo stesso metodo a cui passi un parametro nazionalità e all'interno usi uno switch. Per ogni nazionalità formatti come vuoi.

Offline Kris

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
Re:float e decimali
« Risposta #8 il: 12 Settembre 2013, 17:49:51 CEST »
0
mi sono perso o_O
in base al tuo penultimo post ho fatto così ma è di sicuro errato
Codice (Java): [Seleziona]
if (c.moveToFirst()){
                       
                        Float totale = Float.valueOf(c.getString(0).toString());
                        String result = formatAmount(totale);
                        eAnno.setText(totale);
                }      
cosa devo inserire nel metodo formatAmount?

Offline elfo83

  • Utente normale
  • ***
  • Post: 287
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:float e decimali
« Risposta #9 il: 12 Settembre 2013, 20:15:11 CEST »
0
Cel 'hai sopra il corpo del metodo:

Codice (Java): [Seleziona]
private String formatAmount(Float amount)
        {
                DecimalFormat formatter = new DecimalFormat("###,###,##0.00");
            return formatter.format(amount);
        }

formatAmount prende come parametro un float

Offline Kris

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
Re:float e decimali
« Risposta #10 il: 13 Settembre 2013, 20:54:36 CEST »
0
risolto con Number Format