5

Tôi đã tìm thấy% g để chỉ hiển thị số thập phân nếu cần. Nếu số là toàn bộ, không có dấu .000 được thêm vào, do đó, đó là tốt. Nhưng trong trường hợp ví dụ 1.12345, tôi muốn câu trả lời ngắn gọn là 1.123. Và trong trường hợp 1.000 tôi muốn chỉ hiển thị 1, như% g đã làm.Sử dụng đúng định dạng thông số để hiển thị tối đa ba số thập phân nếu cần, nếu không thì số thập phân là 0?

Tôi đã cố gắng chỉ định% .3g trong chuỗi, nhưng điều đó không hoạt động. Nếu có ai có câu trả lời, tôi sẽ biết ơn!

Trả lời

2

Bạn nhận được gì cho NSLog (@ "%. 3g", 1.12345)?

Tôi đã làm một số thử nghiệm và khi tôi hiểu câu hỏi của bạn, bạn đang đi đúng hướng. Đây là kết quả của tôi:

NSLog(@"%g", 1.000000); => 1 
NSLog(@"%g", 1.123456789); => 1.12346 
NSLog(@"%.1g", 1.123456789); => 1 
NSLog(@"%.2g", 1.123456789); => 1.1 
NSLog(@"%.3g", 1.123456789); => 1.12 
NSLog(@"%.4g", 1.123456789); => 1.123 

Để nhận được những gì bạn muốn sử dụng @ "%. 4g".

+1

Cảm ơn bạn đã trả lời của bạn, nhưng nó vẫn không hoạt động một cách chính xác. –

+1

% .3g sẽ không hiển thị số lượng bán lớn, như 100 000. Điều đó được in dưới dạng 1E + 05, không lý tưởng: D % .3f có vẻ phù hợp nhất, nhưng luôn luôn để lại dấu 0 khi trên một số nguyên .. :( –

+0

Làm cách nào để có 123456.1234 được in như 123456.12, cũng như 123456.00 được in là 123456? Hai số thập phân, chỉ khi cần ..? –

11

Tôi đã xem xét khả năng của "chuỗi định dạng" qua IEEE Specification và vì tôi hiểu rằng hành vi mong muốn của bạn là không thể.

Tôi khuyên bạn nên sử dụng lớp NSNumberFormatter. Tôi đã viết một ví dụ phù hợp với hành vi mong muốn của bạn. Tôi hy vọng rằng sẽ giúp:

NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease]; 
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[numberFormatter setMaximumFractionDigits:2]; 
[numberFormatter setDecimalSeparator:@"."]; 
[numberFormatter setGroupingSeparator:@""]; 
NSString *example1 = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:123456.1234]]; 
NSLog(@"%@", example1); 
NSString *example2 = [numberFormatter stringFromNumber:[NSNumber numberWithFloat:123456.00]]; 
NSLog(@"%@", example2); 
+0

Jan Weinkauff - Cảm ơn bạn rất nhiều! bạn, sẵn sàng sử dụng thời gian của riêng bạn để tìm câu trả lời cho người khác! –

+0

+1 để điều tra các thông số kỹ thuật của IEEE. –

0

Đây là giải pháp của Jan cho Swift 4:

let numberFormatter = NumberFormatter() 
numberFormatter.numberStyle = .decimal 
numberFormatter.maximumFractionDigits = 2 
numberFormatter.decimalSeparator = "." 
numberFormatter.groupingSeparator = "" 
let example1 = numberFormatter.string(from: 123456.1234)! 
print(example1) 
let example2 = numberFormatter.string(from: 123456.00)! 
print(example2) 
Các vấn đề liên quan