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?


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

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)

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;

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


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


11

Sie können die NSDecimalRound- Funktion verwenden


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

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

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

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


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

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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.