Tengo un valor doble como 22.368511 Quiero redondearlo a 2 decimales. es decir, debería devolver 22.37Valor doble redondo a 2 decimales
¿Cómo puedo hacer eso?
Tengo un valor doble como 22.368511 Quiero redondearlo a 2 decimales. es decir, debería devolver 22.37Valor doble redondo a 2 decimales
¿Cómo puedo hacer eso?
Al igual que en la mayoría de los idiomas que el formato es
%.2f
se puede ver más ejemplos here
Edición: También me dio esto si su preocupación por la pantalla del punto en casos de 25.00
{
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
[fmt setPositiveFormat:@"0.##"];
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.3]]);
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.0]]);
}
2010-08-22 15:04:10.614 a.out[6954:903] 25.34 2010-08-22 15:04:10.616 a.out[6954:903] 25.3 2010-08-22 15:04:10.617 a.out[6954:903] 25
En iOS, tuve que usar 'setPositiveFormat:', porque el método 'setFormat:' no existía (definido solo para Mac), pero aun así - excelente respuesta, me ahorró horas de experimentación, por lo que +1 y muchas gracias :) – FurloSK
Un problema: no es redondo, pero trunca. Es de suponer que, utilizando el valor de entrada provisto por el interrogador con su código, el resultado no sería el que esperaba (22.37) o más (22.36). –
Pero no puede usarlo para el cálculo adicional –
Puede utilizar la función NSDecimalRound
que es útil si redondea el valor, (que también pensé que era la pregunta al principio) pero los comentarios muestran que hmthur wats para controlar la pantalla solo ... –
[label setText:@"Value: %.2f", myNumber];
Usted puede usar el siguiente código para dar formato a dos cifras decimales
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
[formatter setMaximumFractionDigits:2];
[formatter setRoundingMode: NSNumberFormatterRoundUp];
NSString *numberString = [formatter stringFromNumber:[NSNumber numberWithFloat:22.368511]];
NSLog(@"Result...%@",numberString);//Result 22.37
Swift 4:
let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.roundingMode = .up
let str = String(describing: formatter.string(from: 12.2345)!)
print(str)
Este es el respuesta correcta (y bastante impresionante y exhaustiva), que debería haber sido galardonado con el reconocimiento de este último. –
En swift 4: let str = String (describiendo: formatter.string (desde: 12.2345)!) – yehyatt
¿Es posible que no aumente de 6 a 7 en 22.36 el valor del resultado? –
Iba a ir con la respuesta de Jason pero noté que en Mi versión de Xcode (4.3.3) no podía hacer eso. entonces, después de investigar un poco, descubrí que recientemente habían cambiado los métodos de clase y eliminado todos los antiguos. así que aquí está cómo tenía que hacerlo:
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
[fmt setMaximumFractionDigits:2];
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);
value = (round(value*100))/100.0;
Creo que esta es la respuesta más correcta, pidió redondearla, no convertirla en una cadena al final (o hacer una doble conversión volver a doblar después). –
Uso NSNumber * unNumero = [NSNumber numberWithDouble: número]; en lugar de NSNumber * aNumber = [NSNumber numberWithFloat: number];
+(NSString *)roundToNearestValue:(double)number
{
NSNumber *aNumber = [NSNumber numberWithDouble:number];
NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setUsesGroupingSeparator:NO];
[numberFormatter setMaximumFractionDigits:2];
[numberFormatter setMinimumFractionDigits:0];
NSString *string = [numberFormatter stringFromNumber:aNumber];
return string;
}
Para eliminar los decimales de su doble, echar un vistazo a esta salida
Obj C
double hellodouble = 10.025;
NSLog(@"Your value with 2 decimals: %.2f", hellodouble);
NSLog(@"Your value with no decimals: %.0f", hellodouble);
La salida será:
10.02
10
Swift 2.1 y Xcode 7.2.1
let hellodouble:Double = 3.14159265358979
print(String(format:"Your value with 2 decimals: %.2f", hellodouble))
print(String(format:"Your value with no decimals: %.0f", hellodouble))
La salida será:
3.14
3
usted puede hacer esto:
NSNumberFormatter* f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setFormat:@0.00"];
// test
NSNumber* a = @12;
NSString* s = [f stringFromNumber:a];
NSLog(@"%@", s);
Para Swift no es una solución simple si no se puede ya sea Fundación importación, uso round() y/o no quiere una cadena (generalmente el caso cuando estás en el patio de recreo):
var number = 31.726354765
var intNumber = Int(number * 1000.0)
var roundedNumber = Double(intNumber)/1000.0
resultado: 31,726
¿Quieres devolver ese valor con 2 lugares decimales? o mostrar el valor con 2 decimales? – thelaws
Realmente solo necesito mostrarlo – testndtv