2012-09-06 45 views
7
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 redondear un número de seis fracciones a dos decimales. En iOS probé el código anterior. Obtengo la respuesta 23.5 cuando doy la entrada como 23.45, pero cuando doy la entrada 23.445, la respuesta es 23.44.Redondeo de la fracción decimal en ios

¿Podría alguien aclarar "redondear a la mitad" en iOS.

+0

Pero recibo la respuesta correcta para la entrada 23.45 como 23.45. – Aravindhan

+1

Sospecho que esto tiene que ver con la forma en que se representan los flotadores en la computadora. Puede estar ingresando 23.445, pero internamente, podría representarse como 23.4449999, por lo que se redondea hacia abajo. – rdelmar

Respuesta

17

Curiosamente, al menos para mí, es es un problema de precisión de flotador. Como lo había sugerido Rdelmar en los comentarios.

Este problema se puede evitar, al menos en este nivel de precisión, mediante el uso de 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 

Así que no sufría de código incorrecto, solo variables imprecisas.

+0

thaks está trabajando .. – karan

Cuestiones relacionadas