Опитвам се да конвертирам низове в числа, използвайки NSNumberFormatter
, В моето заявление входните нива с повече от 2 цифри след десетичната точка не са валидни, т.е. @"3.1"
и @"3.14"
са валидни входове, но @"3.141"
не е.
Документацията за NSNumberFormatter
казва това setMaximumFractionDigits:
"[s] определя максималния брой цифри след десетичния разделител, разрешен като входен сигнал от получателя."
Така че, бях изненадан, когато този код:
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
numberFormatter.maximumFractionDigits = 2;
NSNumber *number = [numberFormatter numberFromString:@"3.141"];
NSLog(@"%@", number);
общоприет @"3.141"
и ми даде следния изход:
3.141
Очаквах превръщането на @"3.141"
да се провали (и да се върне nil
) защото има повече от максималния брой цифри, разрешен след десетичния разделител.
Очевидно тук не разбирам нещо основно NSNumberFormatter
не използвай maximumFractionDigits
като част от валидирането на въвеждането на низове?
Отговори:
1 за отговор № 1Предполага се, че липсват други отговори или някаква индикация за това в официалната документация: Не, NSNumberFormatter
не поддържа изчерпателна проверка при синтактичен анализ на номера и maximumFractionDigits
е приложимо само при форматиране на числа. Това изглежда е в съответствие с sscanf
, strtof
И такива.
-1 за отговор № 2
NSNumberFormatter "S numberFromString:
метод връща NSNumber
ако може да анализира низа правилно, или нула, ако не може.