NSNumberFormatter numberFromString возвращает 0 для средства форматирования стиля валюты - PullRequest
0 голосов
/ 23 ноября 2011

Я попытался протестировать следующий код, чтобы получить двойное значение из UITextField в формате валюты (например, $ 30 034.12 => 30034.12):

// Init and configure formatter
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatter setMaximumFractionDigits:2];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"us_US"];
[formatter setLocale:locale];
[formatter setGroupingSize:3];
[formatter setUsesGroupingSeparator:YES];
[formatter setGroupingSeparator:@","];
[formatter setAllowsFloats:YES];

// Get a formatted string using the local currency formatter and then get a double
// vice-versa
NSNumber *amount = [NSNumber numberWithDouble:30034.12];

NSString *amountString = [formatter stringFromNumber:amount];
// Output here OK : @"$ 30,034.12"

double amountDouble = [[formatter numberFromString:amountString] doubleValue];
// Output here NOT OK : 0

Кто-нибудь имел / решил то жепроблема?

Спасибо!

Обновление:

@ DanielBarden и другие.На самом деле, чтобы упростить пост, я не включил часть, в которой указано, откуда я взял свою строку: текстовое поле.Фактически, строка перед концом кода должна быть:

NSString *amountString = [textField text];

И это текстовое поле было предварительно отформатировано с использованием следующего кода из другого метода (стиль валюты, использующий ту же конфигурацию форматера):

    // Init fromatter with style $ XXX,XXX.yy
    NSNumberFormatter* formatter = [[NSNumberFormatter alloc] init];
    [formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    [formatter setMaximumFractionDigits:2];
    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"us_US"];
    [formatter setLocale:locale];
    [formatter setGroupingSize:3];
    [formatter setGroupingSeparator:@","];
    [formatter setUsesGroupingSeparator:YES];

    // Get the float value of the text field and format it
    textField.text = [formatter 
                      stringFromNumber:[NSNumber 
                                        numberWithDouble:[textField.text 
                                                         floatValue]]];

Теперь проблема в том, что я получаю точно такие же строки, когда делаю NSLog, но когда я сравниваю их char за char с помощью цикла, он говорит, что пробел после $ - это "реальный пробел" в текстеполе и другой символ в начальной строке (сумма, которую я пытался проверить в первоначальном посте ...).Проблема с кодировкой?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2011

Единственное, о чем я могу думать, это проблема с символом $.Установка форматера для стиля валюты предполагает наличие символа $, а если его нет в строке, возвращается 0

0 голосов
/ 23 ноября 2011

Код представляется мне правильным, и Xcode согласился со мной. Я добавил в двух строках, что вам не хватает:

NSLog(@"%@",amountString);
NSLog(@"%f",amountDouble);

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

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