Проблемы с setMaximumFractionDigits

setMaximumFractionDigits не работает со следующим кодом.

NSString *input=@"80.90";
NSNumberFormatter *numberFormatter=[[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setMaximumFractionDigits:2];
NSNumber *number=[numberFormatter numberFromString:input];

число преобразуется в 80.90000000000001. но я поставил ограничение до 2 знаков после запятой. Итак, как мне получить число 80,90 вместо 80,90000000000001


person NNikN    schedule 13.05.2012    source источник


Ответы (2)


setMaximumFractionDigits и setMinimumFractionDigits используются для форматирования числа. или, другими словами, он применяется при преобразовании числа в строку, т.е. stringFromNumber. Таким образом, он не будет применяться, когда вы используете numberFromString

person Sunil Pandey    schedule 13.05.2012
comment
Единственный способ преобразовать число в строку и учесть свойство maxFractionDigits — это сделать следующее: [formatter stringFromNumber:[formatter numberFromString:@$45.321]]; Это вернет 45,32 доллара США, предполагая, что средство форматирования является форматированием валюты с значением maxFractionDigits, равным 2. - person mts; 24.10.2012

Как упоминал @SunilPandey, -setMaximumFractionDigits используется для форматирования числа. Итак, вы можете сделать это следующим образом:

float input = 80.99999;
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setRoundingMode: NSNumberFormatterRoundDown];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setMaximumFractionDigits:2];

NSString *numberString = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:input]];
[formatter release];

NSLog(@"NumberString: %@", numberString);

Вывод:

NumberString: 80.99

person Justin Boo    schedule 13.05.2012
comment
@ Даррарски, что не работает? скопируйте этот код в свой проект и проверьте консоль. Вы получите 80,99 - person Justin Boo; 10.11.2015
comment
@JustinBoo извините, я не ясно выразился. Вопрос был о преобразовании строки в число. Ваш ответ доказал, что setMaximumFractionDigits работает при обратном преобразовании. Это совсем не полезно и может сбивать с толку. - person Darrarski; 10.11.2015