Bulatkan nilai ganda menjadi 2 tempat desimal


87

Saya memiliki nilai ganda sebagai 22.368511 Saya ingin membulatkannya menjadi 2 tempat desimal. yaitu harus mengembalikan 22.37

Bagaimana saya bisa melakukan itu?


1
Apakah Anda ingin mengembalikan nilai itu dengan 2 tempat desimal? atau tampilkan nilai dengan 2 tempat desimal?
thelaws

Sebenarnya saya hanya perlu menampilkannya
testndtv

Jawaban:


189

Seperti dalam kebanyakan bahasa, formatnya adalah

%.2f

Anda dapat melihat lebih banyak contoh di sini


Sunting : Saya juga mendapatkan ini jika Anda khawatir tentang tampilan poin dalam kasus 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
Di iOS, saya harus menggunakan setPositiveFormat:, karena setFormat:metode tidak ada (hanya ditentukan untuk Mac), tetapi masih - jawaban yang bagus, menghemat waktu saya untuk bereksperimen, jadi +1 dan terima kasih banyak :)
FurloSK

1
Satu masalah: tidak bulat, tapi terpotong. Agaknya, dengan menggunakan nilai masukan yang diberikan oleh penanya dengan kode Anda, hasilnya tidak seperti yang diharapkan (22.37) —bahkan (22.36).
James Bush

Tetapi Anda tidak dapat menggunakannya untuk perhitungan lebih lanjut
Parag Bafna

70

Anda dapat menggunakan kode di bawah ini untuk memformatnya menjadi dua tempat desimal

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

Cepat 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
Dalam 4 cepat: biarkan str = String (menjelaskan: formatter.string (dari: 12.2345)!)
yehyatt

Apakah mungkin bahwa tidak meningkatkan 6 menjadi 7 dalam nilai 22,36 hasil?
Shahbaz Akram

@SahabatHidup. RoundingMode memiliki banyak opsi lain juga misalnya, NSNumberFormatterRoundDown, NSNumberFormatterRoundHalfDown, dll.
Abdurrahman Mubeen Ali

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

5
Saya percaya ini adalah jawaban yang paling benar - dia meminta untuk membulatkannya saja - tidak mengubahnya menjadi string di akhir (atau melakukan konversi ganda kembali menjadi dua kali lipat setelahnya).
Martin Kovachev


11

Di Swift 2.0 dan Xcode 7.2:

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

Contoh:

masukkan deskripsi gambar di sini


11

Anda dapat menggunakan fungsi NSDecimalRound


itu berguna jika Anda membulatkan nilainya, (yang saya pikir juga merupakan pertanyaan pada awalnya) tetapi komentar menunjukkan bahwa hmthur ingin mengontrol tampilan saja ...
Jason Rogers

6

Untuk menghapus desimal dari penggandaan Anda, lihat keluaran ini

Obj C

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

Outputnya adalah:

10.02 
10

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

Outputnya adalah:

3.14 
3

4

Saya akan pergi dengan jawaban Jason tetapi saya perhatikan bahwa dalam versi Xcode saya (4.3.3) saya tidak bisa melakukan itu. jadi setelah sedikit penelitian saya menemukan mereka baru-baru ini mengubah metode kelas dan menghapus semua yang lama. jadi begini cara saya melakukannya:

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

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

2

Gunakan NSNumber * aNumber = [NSNumber numberWithDouble: number]; bukannya 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

Untuk Swift ada solusi sederhana jika Anda tidak bisa mengimpor Foundation, gunakan round () dan / atau tidak menginginkan String (biasanya terjadi saat Anda berada di Playground):

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

hasil: 31.726


1

Saya menggunakan solusi yang diposting oleh Umberto Raimondi tipe ekstensi Double:

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

0

Anda bisa melakukan ini:

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

// test
NSNumber* a = @12;
NSString* s = [f stringFromNumber:a];
NSLog(@"%@", s);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.