2013-05-10 21 views
16

Tôi có giá trị kép sau: 0.000900137869045636 mà tôi muốn chuyển đổi thành NSString.Mục tiêu-C: Chuyển đổi toàn bộ giá trị kép thành chuỗi mà không làm mất dữ liệu

Tôi đã thử đoạn mã sau, nhưng không có vấn đề gì, nó vòng giá trị như sau: 0.000900138

[NSString stringWithFormat:@"%.20lf", [currentLocation coordinate].latitude]; 

Tôi nên làm gì để giữ số lượng gấp đôi vì nó là?

Cảm ơn bạn.

+1

Bạn kiểm tra giá trị của chuỗi kết quả như thế nào? –

+4

Nó không truncate cho tôi, bạn có chắc chắn đôi của bạn có chứa giá trị đó? – dreamlax

+1

Hãy nhớ rằng việc chạy câu lệnh trên sẽ không sửa đổi 'vĩ độ' bằng cách nào đó để nó sau đó in ở định dạng rộng hơn. Bạn cần sử dụng đầu ra của lệnh 'stringWithFormat'. –

Trả lời

36

Tạo một NSNumber sử dụng

NSNumber *myDoubleNumber = [NSNumber numberWithDouble:myDouble];

Sau đó gọi

[myDoubleNumber stringValue];

+1

+1 ngay cả khi tôi thích * @ (myDouble) * thay vì * [NSNumber numberWithDouble: myDouble] *. –

+3

Điều này phụ thuộc vào định dạng bên trong 'NSNumber' và không phải là cách tuyệt vời để có được kết quả được xác định chính xác. –

+1

tính năng này không hoạt động, tôi nhận được '0.0009001378784887493' – bazik

0

Có dường như không có bất kỳ vấn đề với mã của bạn như xa như tôi có thể thấy: Tôi chỉ cố gắng như sau và

int main(int argc, const char * argv[]) 
{ 

    double foo = 0.000900137869045636; 
    NSLog([NSString stringWithFormat:@"%.20lf", foo]); 

    return 0; 
} 

đầu ra nhật ký là:

2013-05-10 14:00:18.492 Test[71101:303] 
0.00090013786904563598 

Vì vậy, không chắc chắn vấn đề của bạn là gì, nhưng nó không có trong quá trình tạo NSString.

1

Câu trả lời ngắn: sử dụng %.18lf - được kiểm tra với 0,000900137869045633 -> 0,000900137869045639. Nhưng đừng đùa với chính mình điều này là chính xác, nó chỉ hoạt động do làm tròn.

+0

Vì vậy, 18lf và .20lf làm tròn số khác nhau? – thedp

+0

@thedp - Đầu tiên số bạn có 18 chữ số thập phân, không phải 20. Khi bạn định dạng một số thập phân, chữ số cuối được làm tròn. Số thập phân của bạn không có số nhị phân chính xác tương đương, nhưng số nhị phân khi được làm tròn thành 18 số thập phân khớp, được làm tròn thành 20 số không. Đôi float chính xác chỉ thực sự có 15-17 chữ số của độ chính xác thập phân vì vậy bạn đang đẩy giới hạn ở đây, do đó nhận xét của tôi rằng điều này là không chính xác - bạn may mắn số 18 chữ số của bạn đi ra như nhau. Nếu bạn cần những con số với cái nhìn chính xác này khi sử dụng NSDecimalNumber, nó có tới 38 chữ số chính xác. – CRD

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