Làm tròn giá trị nhân đôi thành 2 chữ số thập phân


87

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 đó?


1
Bạn có muốn trả về giá trị đó với 2 chữ số thập phân không? hoặc hiển thị giá trị với 2 chữ số thập phân?
thelaws

Thật sự tôi chỉ cần để hiển thị nó
testndtv

Câu trả lời:


189

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

13
Trên iOS, tôi đã phải sử dụng 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 :)
FurloSK

1
Một vấn đề: không làm tròn, nhưng cắt ngắn. Có lẽ, bằng cách sử dụng giá trị đầu vào do người hỏi cung cấp cùng với mã của bạn, kết quả sẽ không như những gì anh ta mong đợi (22,37) —khác (22,36).
James Bush

Nhưng bạn không thể sử dụng nó để tính toán thêm
Parag Bafna

70

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)

2
Trong nhanh chóng 4: let str = String (mô tả: formatter.string (từ: 12.2345)!)
yehyatt

Có thể không tăng 6 thành 7 trong 22,36 giá trị của kết quả không?
Shahbaz Akram

@ShahbazAkram Có. Các roundingMode có nhiều lựa chọn khác cũng như NSNumberFormatterRoundDown, NSNumberFormatterRoundHalfDown, vv
Abdurrahman Mubeen Ali

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

5
Tôi tin rằng đây là câu trả lời chính xác nhất - anh ấy yêu cầu chỉ làm tròn nó - không chuyển nó thành chuỗi ở cuối (hoặc thực hiện chuyển đổi kép trở lại thành nhân đôi sau đó).
Martin Kovachev


11

Trong Swift 2.0 và Xcode 7.2:

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

Thí dụ:

nhập mô tả hình ảnh ở đây


11

Bạn có thể sử dụng hàm NSDecimalRound


đó là hữu ích nếu bạn làm tròn giá trị, (mà tôi cũng nghĩ là câu hỏi lúc đầu) nhưng các ý kiến cho thấy các ngôi chùa hmthur để điều khiển màn hình chỉ ...
Jason Rogers

6

Để 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

4

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]]);

2

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;
}

2

Đố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


1

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
    }
}

0

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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.