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

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

74 голосов
/ 15 апреля 2009

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

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

Например:

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

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

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

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

Спасибо, Ash

Ответы [ 11 ]

99 голосов
/ 16 апреля 2009

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

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

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

37 голосов
/ 18 сентября 2013
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);
32 голосов
/ 15 апреля 2009
NSString *numberString = [NSString stringWithFormat:@"%f", round(2.0f * number) / 2.0f];
24 голосов
/ 21 июля 2009

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

11 голосов
/ 16 июня 2010
NSString *numberString = [NSString stringWithFormat:@"%d",lroundf(number)];
8 голосов
/ 15 апреля 2009

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

5 голосов
/ 27 февраля 2017

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

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
2 голосов
/ 17 декабря 2013

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

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

        monthlyPaymentCalculated=[dd doubleValue];

self.monthlyPaymentCritical=monthlyPaymentCalculated;

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

2 голосов
/ 06 февраля 2013
NSString *intNumberString = [NSString stringWithFormat:@"%d", (int)floatNumber];
1 голос
/ 05 августа 2016

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