Tôi có một giá trị kép là 22.368511 Tôi muốn làm tròn nó thành 2 chữ số thập phân. tức là nó sẽ trả về 22,37
Làm thế nào tôi có thể làm điều đó?
Tôi có một giá trị kép là 22.368511 Tôi muốn làm tròn nó thành 2 chữ số thập phân. tức là nó sẽ trả về 22,37
Làm thế nào tôi có thể làm điều đó?
Câu trả lời:
Như trong hầu hết các ngôn ngữ, định dạng là
%.2f
bạn có thể xem thêm ví dụ ở đây
Chỉnh sửa : Tôi cũng nhận được điều này nếu bạn lo lắng về việc hiển thị điểm trong trường hợp 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:
, bởi vì setFormat:
phương pháp không tồn tại (được định nghĩa chỉ dành cho Mac), nhưng vẫn còn - câu trả lời tuyệt vời, tôi đã lưu giờ thử nghiệm, vì vậy +1 và lớn nhờ vào bạn :)
Bạn có thể sử dụng mã bên dưới để định dạng nó thành hai chữ số thập phân
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];
Bạn có thể sử dụng hàm NSDecimalRound
Để loại bỏ các số thập phân khỏi dấu đôi của bạn, hãy xem kết quả này
Mục tiêu C
double hellodouble = 10.025;
NSLog(@"Your value with 2 decimals: %.2f", hellodouble);
NSLog(@"Your value with no decimals: %.0f", hellodouble);
Đầu ra sẽ là:
10.02
10
Swift 2.1 và 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))
Đầu ra sẽ là:
3.14
3
Tôi đã định đi với câu trả lời của Jason nhưng tôi nhận thấy rằng trong phiên bản Xcode của tôi (4.3.3), tôi không thể làm điều đó. vì vậy, sau một chút nghiên cứu, tôi thấy gần đây họ đã thay đổi các phương thức lớp và loại bỏ tất cả các phương thức cũ. vì vậy đây là cách tôi phải làm điều đó:
NSNumberFormatter *fmt = [[NSNumberFormatter alloc] init];
[fmt setMaximumFractionDigits:2];
NSLog(@"%@", [fmt stringFromNumber:[NSNumber numberWithFloat:25.342]]);
Sử dụng NSNumber * aNumber = [NSNumber numberWithDouble: number]; thay vì 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;
}
Đối với Swift, có một giải pháp đơn giản nếu bạn không thể nhập Foundation, hãy sử dụng round () và / hoặc không muốn String (thường là trường hợp khi bạn đang ở Playground):
var number = 31.726354765
var intNumber = Int(number * 1000.0)
var roundedNumber = Double(intNumber) / 1000.0
kết quả: 31,726
Tôi sử dụng giải pháp được đăng bởi Umberto Raimondi mở rộng loại Double:
extension Double {
func roundTo(places:Int) -> Double {
let divisor = pow(10.0, Double(places))
return (self * divisor).rounded() / divisor
}
}
Bạn có thể làm điều này:
NSNumberFormatter* f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
[f setFormat:@0.00"];
// test
NSNumber* a = @12;
NSString* s = [f stringFromNumber:a];
NSLog(@"%@", s);