Число округлений в 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)];

Ответ 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];