2011-02-13 35 views
80

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?

+1

¿Quieres devolver ese valor con 2 lugares decimales? o mostrar el valor con 2 decimales? – thelaws

+0

Realmente solo necesito mostrarlo – testndtv

Respuesta

177

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 
+13

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

+1

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). –

+0

Pero no puede usarlo para el cálculo adicional –

11

Puede utilizar la función NSDecimalRound

+0

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 ... –

13
[label setText:@"Value: %.2f", myNumber]; 
61

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) 
+0

Este es el respuesta correcta (y bastante impresionante y exhaustiva), que debería haber sido galardonado con el reconocimiento de este último. –

+2

En swift 4: let str = String (describiendo: formatter.string (desde: 12.2345)!) – yehyatt

+0

¿Es posible que no aumente de 6 a 7 en 22.36 el valor del resultado? –

4

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]]); 
23
value = (round(value*100))/100.0; 
+3

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). –

2

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

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 
9

En Swift 2,0 y Xcode 7.2:

let pi:Double = 3.14159265358979 
String(format:"%.2f", pi) 

Ejemplo:

enter image description here

0

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

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

Cuestiones relacionadas