Округление чисел в Objective-C



Я пытаюсь сделать некоторое округление числа и преобразование в строку для улучшения вывода в программе Objective-C.



У меня есть значение float, которое я хотел бы округлить до ближайшего .5 и затем использовать его, чтобы установить текст на этикетке.



например:



1.4 будет строка: 1.5



1.2 будет строка: 1



0.2 будет строка: 0



Я потратил некоторое время на Google для ответа, но, будучи noob с Objective-C, я не уверен, что искать! Итак, я был бы очень признателен за указатель в правильном направлении!



спасибо,
Эш

648   11  

11 ответов:

Спасибо за указатели всем, мне удалось придумать решение:

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];

вышеуказанных работ для тестов я бросил на него, но если кто-то знает лучший способ, чтобы сделать это мне было бы интересно услышать это!

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);
NSString *numberString = [NSString stringWithFormat:@"%f", round(2.0f * number) / 2.0f];

используйте lroundf (), чтобы округлить поплавок до целого числа, а затем преобразовать целое число в строку.

NSString *numberString = [NSString stringWithFormat:@"%d",lroundf(number)];

Я бы рекомендовал изучить использование NSNumberFormatter.

простой способ:

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
NSString *intNumberString = [NSString stringWithFormat:@"%d", (int)floatNumber];

следующая техника работала для меня в финансовом приложении.

 NSString *dd=[NSString stringWithFormat:@"%0.2f",monthlyPaymentCalculated];

        monthlyPaymentCalculated=[dd doubleValue];

self.monthlyPaymentCritical=monthlyPaymentCalculated;

то, что сделано, сначала округляется с %0.2 f и хранится в NSString, а затем я просто преобразовал его снова в double, и результат был хорош для моего расчета.

С помощью этих функций вы можете округлить до любого значения.. Если вы используете 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;
}

мне нужно было округлить до определенной цифры (не обязательно до целых чисел). Я сделал NSNumber категория (на основе выкл ответ Эша) и добавил к нему следующий метод:

- (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];

Comments

    Ничего не найдено.