iphone objective-c cocoa-touch decimal nsnumberformatter

iphone - Limite un doble a dos lugares decimales sin ceros al final



objective-c cocoa-touch (3)

¿Qué hay de recortar los caracteres no deseados desde el final de la cadena ?:

NSString* CWDoubleToStringWithMax2Decimals(double d) { NSString* s = [NSString stringWithFormat:@"%.2f", d]; NSCharacterSet* cs = [NSCharacterSet characterSetWithCharacterInString:@"0."]; NSRange r = [s rangeOfCharacterInSet:cs options:NSBackwardsSearch | NSAnchoredSearch]; if (r.location != NSNotFound) { s = [s substringToIndex:r.location]; } return s; }

Leo this y that . Quiero esto exactamente:

1.4324 => "1.43"
9.4000 => "9.4"
43,000 => "43"

9.4 => "9.40" (incorrecto)
43,000 => "43.00" (incorrecto)

En ambas preguntas, las respuestas apuntan a NSNumberFormatter . Entonces debería ser fácil de lograr, pero no para mí.

- (void)viewDidLoad { [super viewDidLoad]; UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 100, 200, 20)]; NSNumberFormatter *doubleValueWithMaxTwoDecimalPlaces = [[NSNumberFormatter alloc] init]; [doubleValueWithMaxTwoDecimalPlaces setNumberStyle:NSNumberFormatterDecimalStyle]; [doubleValueWithMaxTwoDecimalPlaces setPaddingPosition:NSNumberFormatterPadAfterSuffix]; [doubleValueWithMaxTwoDecimalPlaces setFormatWidth:2]; NSNumber *myValue = [NSNumber numberWithDouble:0.01234]; //NSNumber *myValue = [NSNumber numberWithDouble:0.1]; myLabel.text = [doubleValueWithMaxTwoDecimalPlaces stringFromNumber:myValue]; [self.view addSubview:myLabel]; [myLabel release]; myLabel = nil; [doubleValueWithMaxTwoDecimalPlaces release]; doubleValueWithMaxTwoDecimalPlaces = nil; }

También lo intenté con

NSString *resultString = [NSString stringWithFormat: @"%.2lf", [myValue doubleValue]]; NSLog(@"%@", resultString);

Entonces, ¿cómo puedo formatear valores dobles con un máximo de dos decimales? Si la última posición contiene un cero, el cero debe quedar fuera.

Solución:

NSNumberFormatter *doubleValueWithMaxTwoDecimalPlaces = [[NSNumberFormatter alloc] init]; [doubleValueWithMaxTwoDecimalPlaces setNumberStyle:NSNumberFormatterDecimalStyle]; [doubleValueWithMaxTwoDecimalPlaces setMaximumFractionDigits:2]; NSNumber *myValue = [NSNumber numberWithDouble:0.01234]; NSLog(@"%@",[doubleValueWithMaxTwoDecimalPlaces stringFromNumber:myValue]]; [doubleValueWithMaxTwoDecimalPlaces release]; doubleValueWithMaxTwoDecimalPlaces = nil;


Intente agregar la siguiente línea al configurar su formateador:

[doubleValueWithMaxTwoDecimalPlaces setMaximumFractionDigits:2];


NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; [numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; [numberFormatter setRoundingMode:NSNumberFormatterRoundDown]; [numberFormatter setMinimumFractionDigits:2]; numberFormatter.positiveFormat = @"0.##"; NSNumber *num = @(total_Value);