Число округлений в Objective-C
Я пытаюсь выполнить округление чисел и преобразование в строку для улучшения вывода в программе Objective-C.
У меня есть значение float, которое я хотел бы округлить до ближайшего .5, а затем использовать его для установки текста на ярлыке.
Например:
1.4 будет строка: 1.5
1.2 будет строка из: 1
0.2 была бы строкой: 0
Я потратил некоторое время на поиск Google для ответа, но, будучи noob с Objective-C, я не уверен, что искать! Итак, я действительно ценю указатель в правильном направлении!
Спасибо,
Ash
Ответы
Ответ 1
Спасибо всем за указатели, мне удалось найти решение:
float roundedValue = round(2.0f * number) / 2.0f;
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setMaximumFractionDigits:1];
[formatter setRoundingMode: NSNumberFormatterRoundDown];
NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:roundedValue]];
[formatter release];
Вышеупомянутые работы для тестовых случаев я бросил на это, но если кто-нибудь знает лучший способ сделать это, мне было бы интересно услышать это!
Ответ 2
float floatVal = 1.23456;
Округление
int roundedVal = lroundf(floatVal);
NSLog(@"%d",roundedVal);
Округление
int roundedUpVal = ceil(floatVal);
NSLog(@"%d",roundedUpVal);
Округление вниз
int roundedDownVal = floor(floatVal);
NSLog(@"%d",roundedDownVal);
Ответ 3
NSString *numberString = [NSString stringWithFormat:@"%f", round(2.0f * number) / 2.0f];
Ответ 4
Используйте lroundf(), чтобы округлить float до integer и затем преобразовать целое число в строку.
Ответ 5
NSString *numberString = [NSString stringWithFormat:@"%d",lroundf(number)];
Ответ 6
Я бы рекомендовал изучить NSNumberFormatter.
Ответ 7
простой способ:
float theFloat = 1.23456;
int rounded = roundf(theFloat); NSLog(@"%d",rounded);
int roundedUp = ceil(theFloat); NSLog(@"%d",roundedUp);
int roundedDown = floor(theFloat); NSLog(@"%d",roundedDown);
// Note: int can be replaced by float
Ответ 8
NSString *intNumberString = [NSString stringWithFormat:@"%d", (int)floatNumber];
Ответ 9
Следующая техника работала для меня в финансовой заявке.
NSString *dd=[NSString stringWithFormat:@"%0.2f",monthlyPaymentCalculated];
monthlyPaymentCalculated=[dd doubleValue];
self.monthlyPaymentCritical=monthlyPaymentCalculated;
то, что сделано, сначала округляется с% 0.2f и сохраняет его в NSString, тогда я просто преобразовал его снова в double, и результат был хорош для моих вычислений.
Ответ 10
С помощью этих функций вы можете округлить любое значение. Если вы используете p = 2, вы получаете четные числа.
float RoundTo(float x, float p)
{
float y = 1/p;
return int((x+(1/(y+y)))*y)/y;
}
float RoundUp(float x, float p)
{
float y = 1/p;
return int((x+(1/y))*y)/y;
}
float RoundDown(float x, float p)
{
float y = 1/p;
return int(x*y)/y;
}
Ответ 11
Мне нужно было округлить до определенной цифры (не обязательно целые целые числа). Я сделал категорию NSNumber
(на основе Ash answer) и добавил к ней следующий метод:
- (NSString *)stringByRounding:(NSNumberFormatterRoundingMode)roundingMode
toPositionRightOfDecimal:(NSUInteger)position
{
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setMaximumFractionDigits:position];
[formatter setRoundingMode:roundingMode];
NSString *numberString = [formatter stringFromNumber:self];
return numberString;
}
Что позволяет мне использовать его так:
[aNumber stringByRounding:NSNumberFormatterRoundUp toPositionRightOfDecimal:2];
Я могу использовать его для округления до целых чисел, передавая в 0
в качестве второго параметра:
[aNumber stringByRounding:NSNumberFormatterRoundPlain toPositionRightOfDecimal:0];