숫자 유형 (태그)으로 저장된 10.1234567과 같은 십진수 값의 사전이 포함 된 PList가 있습니다. 내 응용 프로그램에서
, 나는 그 PLIST를 읽고 사용자 정의 클래스와 그 접근과의 NSNumber로 그 값 (double 형의 값을) 조작 : iPhone - 소수점 7 자리 숫자 형식으로 NSDictionary에 이중 값 저장
@interface
...
@property(nonatomic, assign) NSNumber* someValue;
...
@end
@implementation
...
- (NSNumber*) someValue { return [self.dict objectForKey:@"val"]; }
- (void) setSomeValue:(NSNumber*)val { [self.dict setValue:val forKey:@"val"]; }
...
@end
그럼 어떤 경우에, 나는 다시 디스크 PLIST에 쓰기.
나는 몇 시간 전에 그 값이 변환되어 이제는 10.123456699999999와 같은 것으로 나타났습니다. 그들 모두! ...
와우, 나는 그 변화를 기대하지 않았습니다.
글쎄, 나는 예를 들어, 이와 같은 여러 가지로 접근을 변경하는 문제, 포함하도록 시도했다 :
- (NSNumber*) someValue { return [self.dict objectForKey:@"val"]; }
- (void) setSomeValue:(NSNumber*)val { [self.dict setValue:
[NSNumber numberWithDouble:[[NSString stringWithFormat:@"%.7lf", [val doubleValue]] doubleValue]]
forKey:@"val"]; }
을하지만 원래 7 개 소수와 그 값의 숙박을 유지 성공할 수 없다.
사전에 입력란에 Number 형식 이외의 다른 것을 사용하지 않고도 7 자리 만 쓸 수 있습니다 (문자열을 사용하면 좋은 해결책이 아닐 수 있습니다).
plist 파일을 만든 것은 수 시간의 타이핑으로 각 필드에 10 진수 값 7 개를 입력하고 그 순간에 "변환"되지 않았습니다. 그들은 10 진수로 저장되었습니다. 그래서 나는 프로그램에 의해 그들을 다시 쓸 때 그 7 개의 십진수를 유지하는 해결책이 있다고 생각합니다.
: 당신 (올리버) 수의 진수 시스템에 쉽게 보이지만하지 바이너리!이 링크를 살펴보십시오 (숫자를 세 번째 행에 삽입 한 후 부동 소수점을 계산하고 그 값을 십진수로 변환합니다). http://www.h-schmidt.net/FloatApplet/IEEE754.html – thomas
@Daniel R Hicks : 이 질문에 대한 답변은 일반적인 답변입니까? 일반적인 대답이 필요하지 않습니다. 부동 소수점 숫자, 소수/이진 개념의 속성은 무엇인지 알고 있습니다 ... 10 진수 (한 개 이상은 아님)를 사전에 그것을 읽기 전에 그 십진수 7 개가 들어있는 PLIST 파일에 넣고 xxx 쓸데없는 소수 자릿수를 추가하지 않고도 관리 할 수 있습니다. – Oliver
@Oliver - 부동 소수점 숫자를 사용하기로 결정했습니다. 결과는 –