Arrotonda il doppio valore a 2 cifre decimali


87

Ho un valore doppio come 22.368511 Voglio arrotondarlo a 2 cifre decimali. cioè dovrebbe restituire 22.37

Come lo posso fare?


1
Vuoi restituire quel valore con 2 cifre decimali? o visualizzare il valore con 2 cifre decimali?
legge il

In realtà ho solo bisogno di visualizzarlo
testndtv

Risposte:


189

Come nella maggior parte delle lingue, il formato è

%.2f

puoi vedere altri esempi qui


Modifica : ho ricevuto anche questo se sei preoccupato per la visualizzazione del punto nei casi di 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
Su iOS, ho dovuto usare setPositiveFormat:, perché il setFormat:metodo non esisteva (definito solo per Mac), ma comunque - ottima risposta, mi ha risparmiato ore di sperimentazione, quindi +1 e un grande grazie a te :)
FurloSK

1
Un problema: non è rotondo, ma tronca. Presumibilmente, utilizzando il valore di input fornito dall'interrogante con il codice, il risultato non sarebbe quello che si aspettava (22.37), piuttosto (22.36).
James Bush

Ma non puoi usarlo per ulteriori calcoli
Parag Bafna

70

È possibile utilizzare il codice seguente per formattarlo con due cifre decimali

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)

2
In swift 4: let str = String (descrivendo: formatter.string (da: 12.2345)!)
yehyatt

È possibile che non aumenti da 6 a 7 in 22,36 il valore del risultato?
Shahbaz Akram

@ShahbazAkram Sì. RoundingMode ha anche molte altre opzioni, ad esempio NSNumberFormatterRoundDown, NSNumberFormatterRoundHalfDown ecc.
Abdurrahman Mubeen Ali

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

5
Credo che questa sia la risposta più corretta - ha chiesto di arrotondarla semplicemente - per non convertirla in una stringa alla fine (o fare una doppia conversione in doppio dopo).
Martin Kovachev


11

In Swift 2.0 e Xcode 7.2:

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

Esempio:

inserisci qui la descrizione dell'immagine


11

È possibile utilizzare la funzione NSDecimalRound


questo è utile se stai arrotondando il valore, (che all'inizio pensavo anche fosse la domanda) ma i commenti mostrano che hmthur wats controlla solo il display ...
Jason Rogers

6

Per rimuovere i decimali dal tuo doppio, dai un'occhiata a questo output

Obj C

double hellodouble = 10.025;
NSLog(@"Your value with 2 decimals: %.2f", hellodouble);
NSLog(@"Your value with no decimals: %.0f", hellodouble);

L'output sarà:

10.02 
10

Swift 2.1 e 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))

L'output sarà:

3.14 
3

4

Stavo per andare con la risposta di Jason ma ho notato che nella mia versione di Xcode (4.3.3) non potevo farlo. così dopo un po 'di ricerca ho scoperto che avevano recentemente cambiato i metodi di classe e rimosso tutti quelli vecchi. quindi ecco come ho dovuto farlo:

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

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

2

Usa NSNumber * aNumber = [NSNumber numberWithDouble: number]; invece di 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

Per Swift c'è una soluzione semplice se non puoi importare Foundation, usa round () e / o non vuoi una String (di solito il caso quando sei in Playground):

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

risultato: 31.726


1

Utilizzo la soluzione postata da Umberto Raimondi allungabile tipo Double:

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

0

Potresti farlo:

NSNumberFormatter* f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setFormat:@0.00"];

// test
NSNumber* a = @12;
NSString* s = [f stringFromNumber:a];
NSLog(@"%@", s);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.