Pregunta Redondeo de números en Objective-C


Estoy tratando de redondear algunos números y convertirlos en una cadena para mejorar la salida en un programa Objective-C.

Tengo un valor flotante que me gustaría redondear al .5 más cercano y luego usarlo para configurar el texto en una etiqueta.

Por ejemplo:

1.4 sería una cadena de: 1.5

1.2 sería una cadena de: 1

0.2 sería una cadena de: 0

Pasé un tiempo buscando en Google una respuesta, pero como novato en Objective-C, ¡no estoy seguro de qué buscar! Por lo tanto, ¡realmente agradecería un puntero en la dirección correcta!

Gracias, Ceniza


73
2018-04-15 17:25


origen


Respuestas:


Gracias por todos los consejos, he logrado encontrar una solución:

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

Lo anterior funciona para los casos de prueba que arrojé, pero si alguien sabe una mejor manera de hacerlo, ¡estaría interesado en escucharlo!


98
2018-04-15 22:06



float floatVal = 1.23456;

Redondeo 

int roundedVal = lroundf(floatVal); 

NSLog(@"%d",roundedVal);

Redondeando

int roundedUpVal = ceil(floatVal); 

NSLog(@"%d",roundedUpVal);

Redondeando

int roundedDownVal = floor(floatVal);

NSLog(@"%d",roundedDownVal);

36
2017-09-18 09:08



NSString *numberString = [NSString stringWithFormat:@"%f", round(2.0f * number) / 2.0f];

32
2018-04-15 18:48



Utilice lroundf () para redondear un flotante a entero y luego convierta el entero en una cadena.


24
2017-07-21 09:48



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

11
2018-06-16 06:02



Yo recomendaría buscar en el uso NSNumberFormatter.


8
2018-04-15 17:53



de una manera simple:

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

4
2018-02-27 09:03



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

2
2018-02-06 11:37



La siguiente técnica funcionó para mí en una aplicación financiera.

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

        monthlyPaymentCalculated=[dd doubleValue];

self.monthlyPaymentCritical=monthlyPaymentCalculated;

lo primero que se hace es redondearlo con% 0.2f y almacenarlo en NSString, luego simplemente lo convertí de nuevo en doble y el resultado fue bueno para mi cálculo.


2
2017-12-17 08:31



Con estas funciones puedes redondear a cualquier valor. Si usas p = 2, obtienes números pares.

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
2017-08-05 10:00



Necesitaba poder redondear a un dígito específico (no necesariamente a enteros enteros). Hice una NSNumber categoría (basada en La respuesta de Ash) y le agregó el siguiente método:

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

Lo que me permite usarlo así:

[aNumber stringByRounding:NSNumberFormatterRoundUp toPositionRightOfDecimal:2];

Puedo usarlo para redondear a enteros al pasar 0 como el segundo parámetro:

[aNumber stringByRounding:NSNumberFormatterRoundPlain toPositionRightOfDecimal:0];

0
2018-04-15 10:43