No difference between %f, %lf, and %Lf?

Nathan Sims <[email protected]> Fri, 3 Jun 2011 09:28:54 -0700
Newsgroups gmane.comp.macosx.devel
Message-ID <[email protected]>
It would seem the only way I can display 8 significant digits after the decimal place using floats, doubles, or long doubles is to get the stringValue of an NSNumber (OSX 10.6.7, Xcode 3.2.6). I know internally the full precision is being used, but it appears there's no difference whatever between format specifiers %f, %lf, and %Lf. Or am I somehow using these incorrectly?

#import <Foundation/Foundation.h>
int main (int argc, const char *argv[]) {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    
    float ftest = -175.12345678;
    double dtest = -175.12345678;
    long double ldtest = -175.12345678;
    char fteststr[32], dteststr[32], ldteststr[32];
    
    // try converting using C functions
    sprintf(fteststr,"%f",ftest);
    sprintf(dteststr,"%lf",dtest);
    sprintf(ldteststr,"%Lf",ldtest);
    NSLog(@"C values:   Float: %f   Double: %lf   Long Double: %Lf",ftest,dtest,ldtest);
    NSLog(@"C strings:  Float: %s   Double: %s   Long Double: %s",fteststr,dteststr,ldteststr);
    
    // try converting using NSNumbers
    float f2test;
    double d2test;
    NSNumber *fNumb = [NSNumber numberWithFloat:ftest];
    NSNumber *dNumb = [NSNumber numberWithDouble:dtest];
    f2test = [fNumb floatValue];
    d2test = [dNumb doubleValue];
    NSString *sStr = [dNumb stringValue];
    NSLog(@"NSNumber:   Float: %f   Double: %lf   String: %@",ftest,dtest,sStr);

    // try converting using NSStrings
    NSString *fStr = [NSString stringWithFormat:@"%f",ftest];
    NSString *dStr = [NSString stringWithFormat:@"%lf",dtest];
    NSString *ldStr = [NSString stringWithFormat:@"%Lf",ldtest];
    NSLog(@"NSString:   Float: %@   Double: %@   String: %@",fStr,dStr,ldStr);

    [pool drain];
    return 0;
}

run
   C values:   Float: -175.123459   Double: -175.123457   Long Double: -175.123457
   C strings:  Float: -175.123459   Double: -175.123457   Long Double: -175.123457
   NSNumber:   Float: -175.123459   Double: -175.123457   String: -175.12345678  <--- the only correct result
   NSString:   Float: -175.123459   Double: -175.123457   String: -175.123457