Redondeando la fracción decimal en ios

NSNumberFormatter *format = [[NSNumberFormatter alloc]init]; [format setNumberStyle:NSNumberFormatterDecimalStyle]; [format setRoundingMode:NSNumberFormatterRoundHalfUp]; [format setMaximumFractionDigits:2]; NSString *temp = [format stringFromNumber:[NSNumber numberWithFloat:23.4451]]; NSLog(@"%@",temp); 

Necesito networkingondear un número de seis cifras de la fracción decimal a dos. En iOS, probé el código anterior. Obtengo la respuesta 23.5 cuando doy la input como 23.45, pero cuando doy la input 23.445 la respuesta es 23.44.

¿Podría alguien aclarar "round half up" en iOS?

Curiosamente, al less para mí, es un problema de precisión flotante. Como sugirió rdelmar en los comentarios.

Este problema se puede evitar, al less en este nivel de precisión, utilizando un doble. Por ejemplo:

 NSNumberFormatter *format = [[NSNumberFormatter alloc]init]; [format setNumberStyle:NSNumberFormatterDecimalStyle]; [format setRoundingMode:NSNumberFormatterRoundHalfUp]; [format setMaximumFractionDigits:2]; [format setMinimumFractionDigits:2]; // With Float: NSLog(@"%@",[format stringFromNumber:[NSNumber numberWithFloat:23.445]]); // Float // Logs 23.44 NSLog(@"%@",[format stringFromNumber:[NSNumber numberWithDouble:23.445]]); // Double // Logs 23.45 

De modo que no padecía un código incorrecto, solo variables imprecisas.