What you have would seem correct to me. Did a small test for you in iOS7 on an iPhone, built with xcode 6.1.1
float val=65.5025;
NSString *string1 = [NSString stringWithFormat:@"%.02f", val];
NSString *string2 = [NSString stringWithFormat:@"%.03f", val];
NSString *string3 = [NSString stringWithFormat:@"%.04f", val];
NSLog(@"Test from string1 = %@",string1);
NSLog(@"Test from string2 = %@",string2);
NSLog(@"Test from string3 = %@",string3);
Output:
Test from string1 = 65.50
Test from string2 = 65.503
Test from string3 = 65.5025
So looks like something else is going on with your code? Are you using the latest xcode. Try this example on your system and see what prints out. Could your float variable be getting adjusted somewhere?