it-swarm.com.ru

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

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

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

Например:

1.4 будет строка: 1,5

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

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

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

Спасибо, Ash

73
Ash

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

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

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

98
Ash
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);
37
Durai Amuthan.H
NSString *numberString = [NSString stringWithFormat:@"%f", round(2.0f * number) / 2.0f];
32
keremk

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

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

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

8
hbw

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

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
5
Lal Krishna

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

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

        monthlyPaymentCalculated=[dd doubleValue];

self.monthlyPaymentCritical=monthlyPaymentCalculated;

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

2
ProgrammingNinja
NSString *intNumberString = [NSString stringWithFormat:@"%d", (int)floatNumber];
2
Vladimirs Matusevics

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

Мне нужно было иметь возможность округлить до определенной цифры (не обязательно до целых чисел). Я сделал категорию 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];
0
Stunner