2009-10-08 8 views

Répondre

5

Déclarez les champs comme un nombre à virgule flottante. De sqllite datatype doc le type de base de données est REAL. C'est un nombre à virgule flottante de 8 octets qui est un type Objective-C double, NSDouble ou NSNumber.

+0

Je deuxième cela. Déclarez la variable en tant que REAL au lieu d'INTEGER et utilisez sqlite3_column_double pour lire la valeur en double. – lostInTransit

+0

merci de me pointer sqllite datatype doc, je sais qu'il est quelque part autour mais je ne peux pas trouver ce document –

13

Il n'existe pas d'entier flottant. Ils sont mutuellement exclusifs à un niveau fondamental (les nombres à virgule flottante peuvent tomber sur des limites entières mais vous avez l'idée): P.

Mais la façon d'obtenir des flottants est d'utiliser la fonction sqlite3_column_double(sqlite3_stmt *, int).

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

cela fonctionne grand merci –

-1

Pour plus d'informations, sqlite3 utilise un système de type de données dynamique. donc tout ce passé, ces:

  • NULL
  • ENTIER
  • REAL
  • TEXTE
  • blob

sont des astuces juste SQLite (techniquement, affinité), et il va finir décider de son propre chef quel type il est ou n'est pas.

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

les fonctions qui reviennent doubles, ints, etc font partie du sqlite C API de son mieux pour vous donner ce que vous voulez .... alors ce qui est stocké dans une colonne peut éventuellement être convertie par sqlite si ce que vous demandez est différent de ce qui est dans la DB.

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

à mi-chemin vers le bas, il y a une table à portée de main qui vous permettent de savoir à quoi vous attendre.

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

Ce code a fonctionné pour moi ..

Questions connexes