NextRev NextRev - 20 days ago 6
iOS Question

Decimal points in sqlite table?

I'm trying to get a float to show up with the decimal point in my sqlite table. I've included the code below for how it shoes up in the game which is all fine. As well as for what happens at the end of a level. And how it gets updated to the sqlite table. It shoes up fine as a decimal during the game, but it gets recorded to the table as a whole number with a .0 after it. So if the final time was 52.4 it will show up as 52.0. I have the field type set to FLOAT. Please help.

Here's how it shoes up in the game, it counts up by tenths of a second.

-(void)updateTimerLabel{

if(appDelegate.gameStateRunning == YES){
timeSeconds-= 0.1;
timerLabel.text=[NSString stringWithFormat:@"Time: %.1f", timeSeconds];
}
}


This is the code for the end of a level...

-(void) endLevel{
if(appDelegate.easymediumhard ==2){

if(gameVarLevel!=5){
stageCompleted = [[UIAlertView alloc] initWithTitle:@"Sweet!" message:@"Level Completed. Play next level?" delegate:self cancelButtonTitle:@"Yes" otherButtonTitles:@"No", nil];
}

else if(gameVarLevel == 5){
globalScore = timeSeconds;
if(appDelegate.ScoreID==0)
{
appDelegate.ScoreID=[appDelegate InsertGame];
}
else{

[appDelegate updateScores:appDelegate.ScoreID];
}

stageCompleted = [[UIAlertView alloc] initWithTitle:@"Sweet!" message:@"All Levels Complete!\n Play again?" delegate:self cancelButtonTitle:@"Yes" otherButtonTitles:@"No", nil];
}
}
}


And this is how it gets updated to the table...

-(void)updateScores:(NSInteger)Primary_key
{
sqlite3_stmt *statement=nil;
NSString *sql=nil;
@try
{
statement=nil;
sql=nil;

if(easymediumhard == 2){
sql=[NSString stringWithFormat:@"update tblHard set Score=? where id=%d",Primary_key];
}
if(sqlite3_prepare_v2(database, [sql UTF8String], -1, &statement, NULL)!=SQLITE_OK)
{
NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
}

sqlite3_bind_int(statement, 1, globalScore);

int success=sqlite3_step(statement);

if (success == SQLITE_ERROR) {

NSAssert1(0, @"Error: failed to insert into the database with message '%s'.", sqlite3_errmsg(database));
}
sqlite3_finalize(statement);
statement=nil;
sql=nil;
}
@catch (NSException *e)
{
NSLog(@"asd");
}
}

Answer

Use sqlite3_bind_double instead of sqlite3_bind_int. And make sure that globalScore is actually a floating-point variable (the code you posted does not make it clear whether it is one).