2011-08-03 36 views
6

Có lẽ thực sự đơn giản nhưng tôi không hiểu ... Tôi có một NSString 50.81114 và tôi muốn chuyển đổi nó thành một đôi ...
Hiện nay tôi đang sử dụng [string doubleValue] nhưng đây là sắp ra như 50.811140000002
Điều gì đang xảy ra ?!NSString để Issue đúp

Disco

Trả lời

2

Double (và bất kỳ số dấu chấm động) có giới hạn riêng của mình chính xác, thông thường nó sẽ vào khoảng 15-16 chữ số. Lưu ý đây không chỉ cho Objective-C, mà còn cho tất cả các ngôn ngữ vì giới hạn của trình bày dấu chấm động nhị phân.

Những gì bạn hiển thị chỉ là bình thường, vì không thể trình bày chính xác số trang 50.81114 trong nhị phân, nên sử dụng xấp xỉ.

Bạn có thể đọc Wikipedia để đọc thêm.

11

do độ chính xác giới hạn double không thể lưu trữ 50.81114. Giá trị gần nhất có thể được lưu trữ trong một đôi là 50.811140000002.

Sử dụng NSDecimalNumber để thay thế. Như thế này:

NSString *string = @"50.81114"; 
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:string]; 
1

Nếu bạn cần phải duy trì con số này là một số thập phân, chứ không phải là nhị phân, sau đó sử dụng số NSDecimalNumber hơn double.