2011-10-13 3 views
1

일부 floatvalues를 Textfile (JSONFormat)으로 내 보낸 다음 프로젝트로 다시 가져옵니다.소수 자릿수를 추가하는 NSNumberformatter

[9697:207] f1 150.837296 - f2 150,8373 
[9697:207] f1 160.746902 - f2 160,7469 
[9697:207] f1 150.242599 - f2 150,2426 
[9697:207] f1 160.068893 - f2 160,0689 
[9697:207] f1 149.451096 - f2 149,4511 
[9697:207] f1 159.154205 - f2 159,1542 

당신이 볼 수 있듯이, 값을 : 두렵게의 NSNumberformatter는

이 내가 NSLog에서 무엇을 얻을 수있는 문자열을 받아 자신의 ....에 어떤 임의의 소수점을 추가한다 (?) 오른쪽은 내 입력 문자열 (f2)이고 왼쪽 값은 플로트 (f1)입니다.

는 Heres는 내 코드 :

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setDecimalSeparator:@","]; 

float f1 = (float)[[formatter numberFromString:[mutableArray objectAtIndex:i]] floatValue]; 

어떤 아이디어 왜 이런 일이 일어나고 있는가?

답변

4

float 형식이 부정확하기 때문에이 효과의 원인은 float입니다.

NSNumberFormatter *formatter = [[[NSNumberFormatter alloc] init] autorelease]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setDecimalSeparator:@","]; 

float f1 = [[formatter numberFromString:@"150,8373"] floatValue]; 
NSLog(@"%.8f", f1); //150.83729553 
NSLog(@"%.4f", f1); //150.8373 - formatting hides a tail 

double f1 = [[formatter numberFromString:@"150,8373"] double]; 
NSLog(@"%.8f", f1); //150.83730000 

그래서, 바로 정밀도를 얻기를 위해 double를 사용

아래의 예를 참조하십시오.

+0

내가보기에 - 아마 나 자신을 만들 수 있었다;) 고마워. – Icky

관련 문제