2009-10-08 7 views
5

ho bisogno di leggere galleggiante decimali punto da SQLite dbCome leggi i numeri mobili (REAL) da un database SQLite su iPhone?

ho creato tipo variabile nel database come INTEGER

sto leggendo con sqlite3_column_int a variabili NSInteger

quali parti dovrebbero cambiato così posso leggere galleggiante interi punto dal database

grazie per le risposte dispiace im un novizio in questo argomenti

risposta

5

dichiarare i campi come un numero in virgola mobile. Da sqllite datatype doc il tipo di database è REAL. Questo è un numero in virgola mobile a 8 byte che è un tipo Objective-C double, NSDouble o NSNumber.

+0

I secondi questo. Dichiarare la variabile come REAL invece di INTEGER e usare sqlite3_column_double per leggere il valore come un doppio. – lostInTransit

+0

grazie per avermi indicato il tipo di documento sqllite, so che è da qualche parte intorno ma non riesco a trovare quel documento –

13

Non esiste un numero intero in virgola mobile. Si escludono a vicenda su un livello fondamentale (i numeri in virgola mobile possono cadere su limiti interi ma si ottiene l'idea): P.

Ma il modo per ottenere i float è utilizzare la funzione sqlite3_column_double(sqlite3_stmt *, int).

NSNumber *f = [NSNumber numberWithFloat:(float)sqlite3_column_double(stmt, col)]; 
+0

funziona benissimo grazie –

-1

Per ulteriori informazioni, sqlite3 utilizza un sistema di tipo di dati dinamico. quindi tutto passato questi:

  • NULL
  • INTERO
  • REALE
  • TESTO
  • BLOB

sono solo suggerimenti per SQLite (tecnicamente, affinità), e va a finire decidere autonomamente che tipo è o non è.

http://www.sqlite.org/datatype3.html

le funzioni che restituiscono doppie, int, ecc fanno parte della C API di SQLite del suo meglio per dare quello che vuoi .... quindi ciò che è memorizzato in una colonna può potenzialmente essere convertito dal SQLite se quello che chiedi è diverso da quello che c'è nel db.

http://www.sqlite.org/c3ref/column_blob.html

circa a metà strada verso il basso, c'è un tavolo a portata di mano che faremo sapere cosa aspettarsi.

2
NSNumber *num; 
int temp = (float)sqlite3_column_double(walkstatement, 3); 
num = [[NSNumber alloc]initWithInt:temp]; 
NSLog(@"%@",num); 

Questo codice ha funzionato per me ..

Problemi correlati