Как NSScanner ожидает строку для сканирования NSDecimal? - PullRequest
0 голосов
/ 27 августа 2009

В Coreplot Брэда я видел этот фрагмент, который избавил от необходимости немного кофе. Я полностью проснулся сейчас:

NSDecimal result;
NSScanner *theScanner = [[NSScanner alloc] initWithString:stringRepresentation];
[theScanner scanDecimal:&result];

А Apple говорит:

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

Итак: если я создаю экземпляр NSScanner и не предоставляю языковой стандарт, он будет ожидать десятичное значение, представленное строкой, как если бы я набрал его в виде простого исходного кода в?

т.е. @ "- 59933845504572.944882211" или @ "123.456789" или @ "145.002e33" или @ "145.002e-33"? Это было бы правильно?

1 Ответ

0 голосов
/ 27 августа 2009

NSScanner извлечет числовое значение из строки таким же образом, как если бы вы инициализировали NSDecimalNumber с этой строкой. Вы можете следовать правилам NSDecimalNumber относительно того, что он может анализировать.

Согласно разделу сканеров «Руководства по программированию строки для какао» от Apple, локализация будет основываться на локали пользователя. Вы можете изменить это, используя setLocale: если вы хотите указать десятичный разделитель вручную.

Мы использовали NSScanner для инициализации NSDecimal из строки, потому что это было значительно быстрее, чем использование NSDecimalNumber с кодом, подобным следующему:

NSDecimalNumber *newNumber = [[NSDecimalNumber alloc] initWithString:@"1.0" locale:[NSLocale currentLocale]];
newDecimal = [newNumber decimalValue];
[newNumber release];

NSScanner выполнял около 582000 преобразований в секунду, тогда как NSDecimalNumber выполнял только 307000 на моем Mac.

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