Autore Topic: Tipi dato Double da Sqlite, troncato nel ciclo for.  (Letto 1313 volte)

Offline clangel

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    Seven
Tipi dato Double da Sqlite, troncato nel ciclo for.
« il: 20 Febbraio 2011, 23:42:03 CET »
0
Salve ragazzi mi è sorto questo problema, ho un database SQLite con dei dati.
La tabella ha come chiave dei numeri decimali e dall'applicazione android cerco di prelevarli, nn ho mai avuto problemi con altri tipi di dati, se non questa stranezza, posto il codice e il relativo logCat
Codice (Java): [Seleziona]
DbHelper dbHelper = new DbHelper(getApplicationContext());
        try {
                dbHelper.createDataBase();
        } catch (IOException e) {
            e.printStackTrace();
        }
        dbHelper.apriDatabase();
        Cursor c = dbHelper.query("poi",null,null,null,null,null,null);
        int n = c.getCount();
        Log.i("aaa",""+n);
        c.moveToFirst();
        Log.i("test",""+c.getDouble(1));
       
        for(int i=0;i<n;i++){
                Log.i("test",""+c.getDouble(1));
                c.moveToNext();
        }
        c.close();
        dbHelper.close();
    }
Codice: [Seleziona]
02-20 22:22:36.309: INFO/aaa(308): 5
02-20 22:22:36.319: INFO/test(308): 16.242407
02-20 22:22:36.338: INFO/test(308): 16.242407
02-20 22:22:36.338: INFO/test(308): 16.0
02-20 22:22:36.338: INFO/test(308): 16.0
02-20 22:22:36.360: INFO/test(308): 16.0
02-20 22:22:36.370: INFO/test(308): 16.0

Ecco quello che succede, se accendo con il cursore fuori dal for, il numero risulta completo di decimali, dentro il for viene troncato e approssimato a 0,essendo tutti valori decimali che si differenziano per la parte decimale, mi crea un bel guaio.
Non ho ancora capito da cosa dipende, se l'accesso al database forse è più lento rispetto all'esecuzione ciclica del for, o se ci sono altri oscuri motivi, consigli?

Offline clangel

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    Seven
Re:Tipi dato Double da Sqlite, troncato nel ciclo for.
« Risposta #1 il: 21 Febbraio 2011, 00:11:40 CET »
0
Dovete scusarmi ma l'ho risolto solo, e non so come si cancella il topic...cmq lo tengo chissà questa cosa possa servire a qualcuno, il problema sorge da questo, il database Sqlite memorizza i numeri decimali con la VIRGOLA quindi 16,12345 mentre l'applicazione gestisce i double con il PUNTO .
Per questo arrivata la parte decimale troncava, quindi ho risolto cosi:
Codice (Java): [Seleziona]
String g =c.getString(1);
StringTokenizer st = new StringTokenizer(g,",");      
String ar = st.nextToken()+"."+st.nextToken();
double lat = Double.parseDouble(ar);
cosi dentrl lat ci sarà il numero completo di decimali!

la cosa che mi chiedo che l'hanno fatto a fare il metodo del Cursor getDouble(), se nn ti prende i decimali?!?!? mahh

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +202
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Tipi dato Double da Sqlite, troncato nel ciclo for.
« Risposta #2 il: 21 Febbraio 2011, 08:51:02 CET »
0
La domanda è piuttosto:   salvi valori Double in una colonna  TEXT ? e poi perchè con la virgola?

getDouble() restituisce un Double se la colonna è DOUBLE
« Ultima modifica: 21 Febbraio 2011, 08:53:12 CET da Qlimax »

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Tipi dato Double da Sqlite, troncato nel ciclo for.
« Risposta #3 il: 21 Febbraio 2011, 09:09:01 CET »
0
La domanda è piuttosto:   salvi valori Double in una colonna  TEXT ? e poi perchè con la virgola?

getDouble() restituisce un Double se la colonna è DOUBLE

quoto Qlimax.
Non importa come il dbms salvi il dato, se è un double, dovrebbe comunque restituirti un double.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline clangel

  • Nuovo arrivato
  • *
  • Post: 14
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    Seven
Re:Tipi dato Double da Sqlite, troncato nel ciclo for.
« Risposta #4 il: 21 Febbraio 2011, 16:43:59 CET »
0
Io nel database lo salvo come Double e il database lo memorizza con la virgola infatti quando accedo tramite sqliteman lo vedo con la virgola, mentre quando scrivo un numero double con java mi ci mette il punto quindi il problema credo che stava qui, infatti l'ho risolto prendendo la Stringa al posto del double e sostituendo alla stringa (presa dal db quindi con la virgola tra i decimali) il punto, cosi poi da effettuare il parceDouble senza avere eccezioni, è strano anche a me, ma è cosi!

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Tipi dato Double da Sqlite, troncato nel ciclo for.
« Risposta #5 il: 21 Febbraio 2011, 17:45:46 CET »
0
Se nel db hai definito la colonna come stringa, puoi benissimo metterci un double, perché viene memorizzata la sua rappresentazione a stringa.
Tu lo salvi come double, lui lo converte in stringa.
Hai la definizione della tabella, per il campo specifico?
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/