NSNumberFormatter для округления значений с плавающей точкой - PullRequest
2 голосов
/ 09 января 2009

У меня есть значение CGFloat, которое я хочу округлить до 3 цифр после десятичной точки. Как мне это сделать?

Спасибо.

Ответы [ 4 ]

10 голосов
/ 09 января 2009
NSString *value = [NSString stringWithFormat:@"%.3f", theFloat];
4 голосов
/ 09 января 2009

Если вы хотите пройти маршрут NSDecimalNumber, вы можете использовать следующее:

NSDecimalNumber *testNumber = [NSDecimalNumber numberWithDouble:theFloat];
NSDecimalNumberHandler *roundingStyle = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundBankers scale:3 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];
NSDecimalNumber *roundedNumber = [testNumber decimalNumberByRoundingAccordingToBehavior:roundingStyle];
NSString *stringValue = [roundedNumber descriptionWithLocale:[NSLocale currentLocale]];

При этом будет использовано округление банкиров до 3 десятичных цифр: «Округлить до ближайшего возможного возвращаемого значения; когда на полпути между двумя вариантами, вернуть возможность, последняя цифра которой является четной. На практике это означает, что в долгосрочной перспективе числа будут округляться так часто, как они округляются в меньшую сторону; систематического отклонения не будет ». Кроме того, он будет использовать специфичный для локали десятичный разделитель (".", "," И т. Д.).

Однако, если у вас есть числовое значение, такое как 12,5, оно вернет «12,5», а не «12,500», что может не соответствовать тому, что вы ищете.

2 голосов
/ 09 января 2009
myFloat = round(myfloat * 1000) / 1000.0;
1 голос
/ 09 января 2009

Попробуйте отформатировать число с плавающей точкой как "% 5.3f" или подобное для отображения

... как это сделал Зак Лэнгли в своем лучшем ответе.

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