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?

testndtv
sumber
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
Jason Rogers
sumber
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)
Saikiran K
sumber
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;
krafter
sumber
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
15
[label setText:@"Value: %.2f", myNumber];
TigerCoding
sumber
11

Di Swift 2.0 dan Xcode 7.2:

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

Contoh:

masukkan deskripsi gambar di sini

Claudio Guirunas
sumber
11

Anda dapat menggunakan fungsi NSDecimalRound

Fruity Geek
sumber
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
Radu Ursache
sumber
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]]);
Kit Ramos
sumber
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;
}
Coder_A_D
sumber
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

Paula Hasstenteufel
sumber
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
    }
}
Matias Masso
sumber
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);
Hoang Minh
sumber