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?

testndtv
fuente
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
Jason Rogers
fuente
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)
Saikiran K
fuente
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;
Krafter
fuente
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
15
[label setText:@"Value: %.2f", myNumber];
TigreCodificación
fuente
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í

Claudio Guirunas
fuente
11

Puede utilizar la función NSDecimalRound

Friki con sabor a fruta
fuente
eso es útil si redondeas el valor (que también pensé que era la pregunta al principio) pero los comentarios muestran que hmthur controla solo la pantalla ...
Jason Rogers
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
Radu Ursache
fuente
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]]);
Kit Ramos
fuente
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;
}
Codificador_A_D
fuente
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

Paula Hasstenteufel
fuente
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
    }
}
Matias Masso
fuente
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);
Hoang Minh
fuente