Obj-C, стоимость валюты к работоспособному номеру, выпуск - PullRequest
0 голосов
/ 14 февраля 2012

Я создаю функцию удаления валюты, которая будет работать по всему миру.Однако обнаружилась ошибка, и я не уверен, почему.

+(double)removeFormatPrice:(NSString *)strPrice {

    NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] 
        autorelease];
    [currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    NSNumber* number = [currencyFormatter numberFromString:strPrice];

    NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] 
        autorelease];
    NSMutableString *mstring = [NSMutableString stringWithString:strPrice];
    NSRange wholeShebang = NSMakeRange(0, [mstring length]);

    [mstring replaceOccurrencesOfString: [formatter decimalSeparator]
                             withString: @"."
                                options: 0
                                  range: wholeShebang];

    double newPrice = [mstring doubleValue];
    if (number == nil) {

        return newPrice;
    } else {
        return [number doubleValue];
    }
}

Если я перейду в 1,000.00, то он заменит точку (точка / полная остановка), он должен просто сделать это, но он также заменит запятую.Newprice выходит как 1. Вот мой полный отладка ... enter image description here

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

Используйте это

[mstring replaceOccurrencesOfString: [formatter groupingSeparator]
                             withString: @""
                                options: 0
                                  range: wholeShebang];
0 голосов
/ 14 февраля 2012

Происходит следующее: -[NSString doubleValue] не может проанализировать строку "1,00000", останавливаясь на запятой, и возвращает "1". Вместо этого вы должны просто отформатировать number в соответствии с вашими потребностями. Сконфигурируйте formatter в нужном формате и используйте его для получения окончательной строки. Не заменяйте никакие символы вручную, если вы можете положиться на структуру.

РЕДАКТИРОВАТЬ: полный пример кода

NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[currencyFormatter setNumberStyle: NSNumberFormatterCurrencyStyle];
NSNumber* number = [currencyFormatter numberFromString:strPrice];

NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease];
[formatter setPositiveFormat: @"#.00"];
NSLog(@"%@ %@", number, [formatter stringFromNumber: number]);

На моей машине с текущей локалью я получаю:

1000 1000,00

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...