ปัดเศษค่าสองตำแหน่งเป็นทศนิยม 2 ตำแหน่ง


87

ฉันมีค่าสองเท่าเป็น 22.368511 ฉันต้องการปัดเศษเป็นทศนิยม 2 ตำแหน่ง กล่าวคือควรกลับ 22.37

ฉันจะทำเช่นนั้นได้อย่างไร?


1
คุณต้องการส่งคืนค่านั้นด้วยทศนิยม 2 ตำแหน่งหรือไม่ หรือแสดงค่าด้วยทศนิยม 2 ตำแหน่ง?
thelaws

ที่จริงฉันแค่ต้องแสดงมัน
testndtv

คำตอบ:


189

เช่นเดียวกับในภาษาส่วนใหญ่รูปแบบคือ

%.2f

คุณสามารถดูตัวอย่างเพิ่มเติมได้ที่นี่


แก้ไข : ฉันได้รับสิ่งนี้เช่นกันหากคุณกังวลเกี่ยวกับการแสดงจุดในกรณีของ 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
บน iOS ฉันต้องใช้setPositiveFormat:เพราะไม่มีsetFormat:วิธีการ (กำหนดไว้สำหรับ Mac เท่านั้น) แต่ก็ยังคงเป็นคำตอบที่ดีช่วยให้ฉันทดลองได้หลายชั่วโมงดังนั้น +1 และขอบคุณมาก :)
FurloSK

1
ปัญหาหนึ่ง: ไม่กลม แต่ตัดทอน สันนิษฐานว่าการใช้ค่าอินพุตที่ผู้ถามให้มาพร้อมรหัสของคุณผลลัพธ์จะไม่เป็นไปตามที่เขาคาดหวัง (22.37) - Rather (22.36)
James Bush

แต่คุณไม่สามารถใช้เพื่อคำนวณเพิ่มเติมได้
Parag Bafna

70

คุณสามารถใช้โค้ดด้านล่างเพื่อจัดรูปแบบเป็นทศนิยมสองตำแหน่ง

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: ให้ str = String (อธิบาย: formatter.string (from: 12.2345)!)
yehyatt

เป็นไปได้ไหมที่จะไม่เพิ่ม 6 ถึง 7 ใน 22.36 มูลค่าของผลลัพธ์?
Shahbaz Akram

@ShahbazAkram ครับ RoundingMode มีตัวเลือกอื่น ๆ อีกมากมายเช่น NSNumberFormatterRoundDown, NSNumberFormatterRoundHalfDown เป็นต้น
Abdurrahman Mubeen Ali

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

5
ฉันเชื่อว่านี่เป็นคำตอบที่ถูกต้องที่สุด - เขาขอให้ปัดเศษ - ไม่ใช่แปลงเป็นสตริงในตอนท้าย (หรือทำการแปลงซ้ำเป็นสองเท่าในภายหลัง)
Martin Kovachev



11

คุณสามารถใช้ฟังก์ชันNSDecimalRound


ที่มีประโยชน์ถ้าคุณปัดเศษค่า (ซึ่งตอนแรกฉันคิดว่าเป็นคำถาม) แต่ความคิดเห็นแสดงว่า hmthur wats เพื่อควบคุมการแสดงผลเท่านั้น ...
Jason Rogers

6

ในการลบทศนิยมออกจากคู่ของคุณให้ดูที่ผลลัพธ์นี้

Obj C.

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

ผลลัพธ์จะเป็น:

10.02 
10

Swift 2.1 และ 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))

ผลลัพธ์จะเป็น:

3.14 
3

4

ฉันจะไปกับคำตอบของ Jason แต่ฉันสังเกตเห็นว่าใน Xcode เวอร์ชันของฉัน (4.3.3) ฉันไม่สามารถทำเช่นนั้นได้ ดังนั้นหลังจากการค้นคว้าเล็กน้อยฉันพบว่าพวกเขาเพิ่งเปลี่ยนวิธีการเรียนและลบวิธีการเดิมทั้งหมดออก นี่คือวิธีที่ฉันต้องทำ:

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

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

2

ใช้ NSNumber * aNumber = [NSNumber numberWithDouble: number]; แทน 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

สำหรับ Swift มีวิธีง่ายๆหากคุณไม่สามารถนำเข้า Foundation ได้ให้ใช้ round () และ / หรือไม่ต้องการ String (โดยปกติจะเป็นกรณีที่คุณอยู่ใน Playground):

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

ผลลัพธ์: 31.726


1

ฉันใช้วิธีแก้ปัญหาที่โพสต์โดยUmberto Raimondi ขยายประเภท Double:

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

0

คุณสามารถทำได้:

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

// test
NSNumber* a = @12;
NSString* s = [f stringFromNumber:a];
NSLog(@"%@", s);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.