ฉันมีค่าสองเท่าเป็น 22.368511 ฉันต้องการปัดเศษเป็นทศนิยม 2 ตำแหน่ง กล่าวคือควรกลับ 22.37
ฉันจะทำเช่นนั้นได้อย่างไร?
ฉันมีค่าสองเท่าเป็น 22.368511 ฉันต้องการปัดเศษเป็นทศนิยม 2 ตำแหน่ง กล่าวคือควรกลับ 22.37
ฉันจะทำเช่นนั้นได้อย่างไร?
คำตอบ:
เช่นเดียวกับในภาษาส่วนใหญ่รูปแบบคือ
%.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
setPositiveFormat:
เพราะไม่มีsetFormat:
วิธีการ (กำหนดไว้สำหรับ Mac เท่านั้น) แต่ก็ยังคงเป็นคำตอบที่ดีช่วยให้ฉันทดลองได้หลายชั่วโมงดังนั้น +1 และขอบคุณมาก :)
คุณสามารถใช้โค้ดด้านล่างเพื่อจัดรูปแบบเป็นทศนิยมสองตำแหน่ง
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)
value = (round(value*100)) / 100.0;
[label setText:@"Value: %.2f", myNumber];
คุณสามารถใช้ฟังก์ชันNSDecimalRound
ในการลบทศนิยมออกจากคู่ของคุณให้ดูที่ผลลัพธ์นี้
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
ฉันจะไปกับคำตอบของ Jason แต่ฉันสังเกตเห็นว่าใน Xcode เวอร์ชันของฉัน (4.3.3) ฉันไม่สามารถทำเช่นนั้นได้ ดังนั้นหลังจากการค้นคว้าเล็กน้อยฉันพบว่าพวกเขาเพิ่งเปลี่ยนวิธีการเรียนและลบวิธีการเดิมทั้งหมดออก นี่คือวิธีที่ฉันต้องทำ:
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
[fmt setMaximumFractionDigits:2];
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);
ใช้ 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;
}
สำหรับ Swift มีวิธีง่ายๆหากคุณไม่สามารถนำเข้า Foundation ได้ให้ใช้ round () และ / หรือไม่ต้องการ String (โดยปกติจะเป็นกรณีที่คุณอยู่ใน Playground):
var number = 31.726354765
var intNumber = Int(number * 1000.0)
var roundedNumber = Double(intNumber) / 1000.0
ผลลัพธ์: 31.726
ฉันใช้วิธีแก้ปัญหาที่โพสต์โดยUmberto Raimondi ขยายประเภท Double:
extension Double {
func roundTo(places:Int) -> Double {
let divisor = pow(10.0, Double(places))
return (self * divisor).rounded() / divisor
}
}
คุณสามารถทำได้:
NSNumberFormatter* f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setFormat:@0.00"];
// test
NSNumber* a = @12;
NSString* s = [f stringFromNumber:a];
NSLog(@"%@", s);