2012-09-06 42 views
7
NSNumberFormatter *format = [[NSNumberFormatter alloc]init]; 
[format setNumberStyle:NSNumberFormatterDecimalStyle]; 
[format setRoundingMode:NSNumberFormatterRoundHalfUp]; 
[format setMaximumFractionDigits:2]; 
NSString *temp = [format stringFromNumber:[NSNumber numberWithFloat:23.4451]]; 
NSLog(@"%@",temp); 

Tôi cần làm tròn một số thập phân sáu thành hai thập phân. Trong iOS, tôi đã thử mã ở trên. Tôi nhận được câu trả lời 23.5 khi tôi cung cấp cho đầu vào là 23.45, nhưng khi tôi cung cấp cho đầu vào 23.445 câu trả lời là 23.44.Làm tròn phần thập phân trong ios

Ai đó có thể xóa "làm tròn một nửa" trong iOS.

+0

Nhưng tôi nhận được câu trả lời đúng cho đầu vào 23.45 là 23.45. – Aravindhan

+1

Tôi nghi ngờ điều này đã làm với cách nổi được đại diện trong máy tính. Bạn có thể nhập 23.445, nhưng nội bộ, nó có thể được đại diện như một cái gì đó như 23.4449999, do đó, nó được làm tròn xuống. – rdelmar

Trả lời

17

Điều thú vị, ít nhất là với tôi, nó một vấn đề chính xác nổi. Như rdelmar đã gợi ý trong các bình luận.

Vấn đề này có thể tránh được, ít nhất ở mức độ chính xác này, bằng cách sử dụng gấp đôi. Ví dụ:

NSNumberFormatter *format = [[NSNumberFormatter alloc]init]; 
[format setNumberStyle:NSNumberFormatterDecimalStyle]; 
[format setRoundingMode:NSNumberFormatterRoundHalfUp]; 
[format setMaximumFractionDigits:2]; 
[format setMinimumFractionDigits:2]; 

// With Float: 
NSLog(@"%@",[format stringFromNumber:[NSNumber numberWithFloat:23.445]]); // Float 
// Logs 23.44 
NSLog(@"%@",[format stringFromNumber:[NSNumber numberWithDouble:23.445]]); // Double 
// Logs 23.45 

Vì vậy, bạn không bị mã xấu, chỉ là các biến không chính xác.

+0

thaks nó hoạt động .. – karan

Các vấn đề liên quan