Çift değeri 2 ondalık basamağa yuvarlayın


87

22.368511 olarak çift değerim var, onu 2 ondalık basamağa yuvarlamak istiyorum. yani 22.37 döndürmelidir

Bunu nasıl yapabilirim?


1
Bu değeri 2 ondalık basamakla döndürmek istiyor musunuz? veya değeri 2 ondalık basamakla mı görüntülüyorsunuz?
thelaws

Aslında bunu göstermem gerekiyor
testndtv

Yanıtlar:


189

Çoğu dilde olduğu gibi, format

%.2f

burada daha fazla örnek görebilirsiniz


Düzenleme : 25.00 vakalarında noktanın gösterilmesiyle ilgili endişeleriniz varsa bunu da aldım.

{
    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
İOS'ta kullanmak zorundaydım setPositiveFormat:, çünkü setFormat:yöntem yoktu (sadece Mac için tanımlanmıştı), ama yine de - harika cevap, bana saatler süren deneylerden kurtardı, bu yüzden +1 ve senin sayende çok teşekkürler :)
FurloSK

1
Bir sorun: yuvarlak değil, kesiliyor. Muhtemelen, soru soran tarafından kodunuzla sağlanan girdi değeri kullanıldığında, sonuç beklediği gibi olmayacaktır (22.37) - hatta (22.36).
James Bush

Ancak daha fazla hesaplama için kullanamazsınız
Parag Bafna

70

İki ondalık basamağa biçimlendirmek için aşağıdaki kodu kullanabilirsiniz

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
Swift 4'de: let str = Dize (! Açıklayan: (dan formatter.string: 12.2345))
yehyatt

Sonuç 22.36 değerinde 6'yı 7'ye çıkarmamak mümkün müdür?
Shahbaz Akram

@ShahbazAkram Evet. RoundingMode'un başka birçok seçeneği de vardır, örneğin NSNumberFormatterRoundDown, NSNumberFormatterRoundHalfDown vb.
Abdurrahman Mubeen Ali

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

5
Bunun en doğru cevap olduğuna inanıyorum - sadece yuvarlamasını istedi - sonunda onu bir dizgeye dönüştürmemesini (ya da daha sonra ikiye çift çevirme).
Martin Kovachev


11

Swift 2.0 ve Xcode 7.2'de:

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

Misal:

görüntü açıklamasını buraya girin


11

NSDecimalRound işlevini kullanabilirsiniz


Bu, değeri yuvarlamak için kullanışlıdır, (ki bu da ilk başta soru olduğunu düşündüm), ancak yorumlar hmthur'un yalnızca ekranı kontrol etmek istediğini gösteriyor ...
Jason Rogers

6

Ondalık sayıları çiftinizden çıkarmak için bu çıktıya bir göz atın

Obj C

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

Çıktı şu şekilde olacaktır:

10.02 
10

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

Çıktı şu şekilde olacaktır:

3.14 
3

4

Jason'ın cevabıyla gidecektim ama benim Xcode sürümümde (4.3.3) bunu yapamayacağımı fark ettim. bu yüzden biraz araştırmadan sonra, son zamanlarda sınıf yöntemlerini değiştirdiklerini ve tüm eskileri kaldırdıklarını öğrendim. işte bunu nasıl yapmam gerekti:

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

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

2

NSNumber * aNumber = [NSNumber numberWithDouble: number] kullanın; NSNumber yerine * 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

Swift için Foundation'ı içe aktaramıyorsanız, round () kullanın ve / veya String istemiyorsanız (genellikle Playground'da olduğunuzda geçerli olan) basit bir çözüm var:

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

sonuç: 31.726


1

Umberto Raimondi tarafından yayınlanan Double tipi genişletme çözümünü kullanıyorum :

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

0

Bunu yapabilirsin:

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

// test
NSNumber* a = @12;
NSString* s = [f stringFromNumber:a];
NSLog(@"%@", s);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.