Runden Sie den doppelten Wert auf 2 Dezimalstellen

87

Ich habe einen doppelten Wert als 22.368511. Ich möchte ihn auf 2 Dezimalstellen runden. dh es sollte 22,37 zurückgeben

Wie kann ich das machen?

testndtv
quelle
1
Möchten Sie diesen Wert mit 2 Dezimalstellen zurückgeben? oder den Wert mit 2 Dezimalstellen anzeigen?
Gesetze
Eigentlich muss ich es nur anzeigen
testndtv

Antworten:

189

Wie in den meisten Sprachen ist das Format

%.2f

Weitere Beispiele finden Sie hier


Bearbeiten : Ich habe dies auch erhalten, wenn Sie über die Anzeige des Punktes in Fällen von 25.00 besorgt sind

{
    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
quelle
13
Unter iOS musste ich verwenden setPositiveFormat:, da die setFormat:Methode nicht existierte (nur für Mac definiert), aber dennoch - tolle Antwort, ersparte mir Stunden des Experimentierens, also +1 und ein großes Dankeschön :)
FurloSK
1
Ein Problem: ist nicht rund, sondern schneidet ab. Vermutlich wäre das Ergebnis unter Verwendung des Eingabewerts, den der Fragesteller mit Ihrem Code angegeben hat, nicht das, was er erwartet hat (22,37) - eher (22,36).
James Bush
Aber Sie können es nicht für weitere Berechnungen verwenden
Parag Bafna
70

Sie können den folgenden Code verwenden, um ihn auf zwei Dezimalstellen zu formatieren

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)
Saikiran K.
quelle
2
In Swift 4: Lassen Sie str = String (Beschreibung: formatter.string (von: 12.2345)!)
yehyatt
Ist es möglich, dass sich der Wert des Ergebnisses von 22,36 nicht um 6 auf 7 erhöht?
Shahbaz Akram
@ ShahbazAkram Ja. Der Rundungsmodus hat auch viele andere Optionen, z. B. NSNumberFormatterRoundDown, NSNumberFormatterRoundHalfDown usw.
Abdurrahman Mubeen Ali
30
 value = (round(value*100)) / 100.0;
krafter
quelle
5
Ich glaube, dies ist die richtigste Antwort - er hat darum gebeten, sie nur zu runden - sie am Ende nicht in einen String umzuwandeln (oder danach eine doppelte Konvertierung zurück in eine doppelte durchzuführen).
Martin Kovachev
15
[label setText:@"Value: %.2f", myNumber];
TigerCoding
quelle
11

In Swift 2.0 und Xcode 7.2:

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

Beispiel:

Geben Sie hier die Bildbeschreibung ein

Claudio Guirunas
quelle
11

Sie können die NSDecimalRound- Funktion verwenden

Fruchtiger Geek
quelle
Das ist nützlich, wenn Sie den Wert runden (was ich zuerst auch für die Frage hielt), aber die Kommentare zeigen, dass hmthur nur die Anzeige steuern muss ...
Jason Rogers
6

Sehen Sie sich diese Ausgabe an, um die Dezimalstellen von Ihrem Double zu entfernen

Obj C.

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

Die Ausgabe wird sein:

10.02 
10

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

Die Ausgabe wird sein:

3.14 
3
Radu Ursache
quelle
4

Ich wollte mit Jasons Antwort gehen, aber ich bemerkte, dass ich das in meiner Version von Xcode (4.3.3) nicht konnte. Nach ein wenig Recherche stellte ich fest, dass sie kürzlich die Klassenmethoden geändert und alle alten entfernt hatten. So musste ich es machen:

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

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

Verwenden Sie NSNumber * aNumber = [NSNumber numberWithDouble: number]; anstelle von 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;
}
Coder_A_D
quelle
2

Für Swift gibt es eine einfache Lösung, wenn Sie Foundation nicht importieren können, round () verwenden und / oder keinen String möchten (normalerweise, wenn Sie sich auf dem Spielplatz befinden):

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

Ergebnis: 31.726

Paula Hasstenteufel
quelle
1

Ich verwende die von Umberto Raimondi veröffentlichte Lösung, die den Typ Double erweitert:

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

Sie könnten dies tun:

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
quelle