with decimals objective-c cocoa macos formatting rounding

objective c - decimals - Redondeo de números en Objective-C



double with 2 decimals swift (11)

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, Ash


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


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!


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.


Necesitaba poder redondear a un dígito específico (no necesariamente a enteros enteros). Hice una categoría NSNumber (basada en la respuesta de Ash ) y le agregué 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 pasando 0 como el segundo parámetro:

[aNumber stringByRounding:NSNumberFormatterRoundPlain toPositionRightOfDecimal:0];



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


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


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


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


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


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