Redondea el valor doble a 2 decimales


87

Tengo un valor doble como 22.368511 Quiero redondearlo a 2 lugares decimales. es decir, debería devolver 22,37

¿Cómo puedo hacer eso?


1
¿Quiere devolver ese valor con 2 decimales? o mostrar el valor con 2 decimales?
thelaws

En realidad, solo necesito mostrarlo
testndtv

Respuestas:


189

Como en la mayoría de los idiomas, el formato es

%.2f

puedes ver más ejemplos aquí


Editar : También recibí esto si le preocupa la visualización del punto en los 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 usarlo setPositiveFormat:, porque el setFormat:método no existía (definido solo para Mac), pero aún así, excelente respuesta, me ahorré horas de experimentar, así que +1 y
muchas

1
Un problema: no se redondea, sino que se trunca. Presumiblemente, usando el valor de entrada proporcionado por el interrogador con su código, el resultado no sería el que esperaba (22.37), sino (22.36).
James Bush

Pero no puede usarlo para cálculos adicionales
Parag Bafna

70

Puede usar el siguiente código para formatearlo a dos lugares 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

Rápido 4:

let formatter = NumberFormatter()
formatter.numberStyle = .decimal
formatter.maximumFractionDigits = 2
formatter.roundingMode = .up

let str = String(describing: formatter.string(from: 12.2345)!)

print(str)

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

¿Es posible que no aumente de 6 a 7 en 22,36 el valor de resultado?
Shahbaz Akram

@ShahbazAkram Sí. El roundingMode también tiene muchas otras opciones, por ejemplo, NSNumberFormatterRoundDown, NSNumberFormatterRoundHalfDown, etc.
Abdurrahman Mubeen Ali

30
 value = (round(value*100)) / 100.0;

5
Creo que esta es la respuesta más correcta, pidió simplemente redondearla, no convertirla en una cadena al final (o hacer una doble conversión de nuevo a doble después).
Martin Kovachev


11

En Swift 2.0 y Xcode 7.2:

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

Ejemplo:

ingrese la descripción de la imagen aquí



6

Para eliminar los decimales de su doble, eche 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

4

Iba a seguir la respuesta de Jason, pero me di cuenta de que en Mi versión de Xcode (4.3.3) no podía hacer eso. así que después de investigar un poco, descubrí que habían cambiado recientemente los métodos de clase y eliminado todos los antiguos. así que así es como tuve que hacerlo:

NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];

[fmt setMaximumFractionDigits:2];
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);

2

Use NSNumber * aNumber = [NSNumber numberWithDouble: number]; 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;
}

2

Para Swift, hay una solución simple si no puede importar Foundation, use round () y / o no quiere una String (generalmente es el caso cuando está en Playground):

var number = 31.726354765
var intNumber = Int(number * 1000.0)
var roundedNumber = Double(intNumber) / 1000.0

resultado: 31.726


1

Utilizo la solución publicada por Umberto Raimondi extendiendo el tipo Double:

extension Double {
    func roundTo(places:Int) -> Double {
        let divisor = pow(10.0, Double(places))
        return (self * divisor).rounded() / divisor
    }
}

0

Podrías 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);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.