• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
NSScanner troubles
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

NSScanner troubles


  • Subject: NSScanner troubles
  • From: WT <email@hidden>
  • Date: Sat, 11 Dec 2010 01:06:45 -0200

Hi all,

I wrote some code to parse doubles from strings in a locale (pt_BR) where the grouping and decimal separators are "." and "," respectively (the exact opposite of en_US). It should be a piece of cake, but I'm not getting the correct results. Can someone please tell me what obvious fact I'm missing? I've been staring at this code for a while now and can't figure out what's wrong.

The code below is from an iOS test project created just for this scanner issue.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.

    [self.window makeKeyAndVisible];

    double num;

    num = [self scanDouble: @"1,23"];
    NSLog(@"result: %f", num);

    num = [self scanDouble: @"12,34"];
    NSLog(@"result: %f", num);

    num = [self scanDouble: @"123,45"];
    NSLog(@"result: %f", num);

    num = [self scanDouble: @"1234,56"];
    NSLog(@"result: %f", num);

    num = [self scanDouble: @"1.234,56"];
    NSLog(@"result: %f", num);

    num = [self scanDouble: @"12.345,67"];
    NSLog(@"result: %f", num);

    return YES;
}

- (double) scanDouble: (NSString*) stringToScan;
{
    NSLocale* locale = [[NSLocale alloc] initWithLocaleIdentifier: @"pt_BR"];

    static BOOL doneOnce = NO;

    if (! doneOnce)
    {
        doneOnce = YES;

        NSLog(@"  group sep: %@",
                [locale objectForKey: NSLocaleGroupingSeparator]);

        NSLog(@"decimal sep: %@",
                [locale objectForKey: NSLocaleDecimalSeparator]);
    }

    NSLog(@"string to scan: '%@'", stringToScan);

    NSScanner* scanner = [[NSScanner alloc] initWithString: stringToScan];
    [scanner setLocale: locale];

    double num;

    if ([scanner scanDouble: &num])
    {
        [scanner release];
        return num;
    }
    else
    {
        NSLog(@"*** ERROR scanning '%@' for a double", stringToScan);

        [scanner release];
        return 0.0;
    }
}

Here are the results:

[Session started at 2010-12-11 00:57:52 -0200.]
2010-12-11 00:57:54.553 ScannerTest[82954:207]   group sep: .
2010-12-11 00:57:54.554 ScannerTest[82954:207] decimal sep: ,
2010-12-11 00:57:54.562 ScannerTest[82954:207] string to scan: '1,23'
2010-12-11 00:57:54.564 ScannerTest[82954:207] result: 1.230000
2010-12-11 00:57:54.566 ScannerTest[82954:207] string to scan: '12,34'
2010-12-11 00:57:54.566 ScannerTest[82954:207] result: 12.340000
2010-12-11 00:57:54.567 ScannerTest[82954:207] string to scan: '123,45'
2010-12-11 00:57:54.568 ScannerTest[82954:207] result: 123.450000
2010-12-11 00:57:54.568 ScannerTest[82954:207] string to scan: '1234,56'
2010-12-11 00:57:54.569 ScannerTest[82954:207] result: 1234.560000
2010-12-11 00:57:54.569 ScannerTest[82954:207] string to scan: '1.234,56'
2010-12-11 00:57:54.569 ScannerTest[82954:207] result: 1.000000
2010-12-11 00:57:54.570 ScannerTest[82954:207] string to scan: '12.345,67'
2010-12-11 00:57:54.576 ScannerTest[82954:207] result: 12.000000
Terminating in response to SpringBoard's termination.

Note that the scanner returns the wrong result when the string to be parsed contains a '.' but I can't see why.

Thanks in advance.
WT

_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: NSScanner troubles
      • From: Ken Thomases <email@hidden>
    • Re: NSScanner troubles
      • From: Greg Parker <email@hidden>
  • Prev by Date: NSUnarchiver / Data.archive Extract all Keys
  • Next by Date: Re: NSScanner troubles
  • Previous by thread: Re: NSUnarchiver / Data.archive Extract all Keys
  • Next by thread: Re: NSScanner troubles
  • Index(es):
    • Date
    • Thread