어레이에서 검색 될 때 uitextfield.text 정확한 플로트 번호를 반환하는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/19825257

문제

Textfield.text 입력을 저장하는 배열이 있습니다. 그런 다음 다른 곳에서 텍스트를 플로트로 검색합니다. 이것은 나에게 텍스트 필드에서 "정확한 숫자"를주는 것 같습니다.

예 a

   navtestAppDelegate *appDelegate = 
   (navtestAppDelegate *)[[UIApplication 
    sharedApplication] delegate];

NSMutableArray *storedData = 
 appDelegate.myData;

[storedData replaceObjectAtIndex: myIndex withObject: mytextfield.text];

float number = [[storedData objectAtIndex:myIndex] floatValue];

만약에 mytextfield.text input is 22.8, float number 보고 22.8

하지만,

예 B.

[storedData replaceObjectAtIndex: myIndex withObject: @"22.8”];

float number  = [[storedData objectAtIndex:myIndex] floatValue];

float number 보고 22.7999999

예를 들어 정확한 숫자를 얻는 이유를 이해하지 못합니다.

도움이 되었습니까?

해결책

값 22.8은 바이너리 플로팅 포인트에서 정확하게 표현할 수 없습니다. 당신이보고있는 것은 디스플레이 형식을 기반으로 한 표현입니다. 다른 디스플레이 방법마다 다른 디스플레이 형식을 사용할 수 있습니다. 다른 수의 숫자와 반올림은 반올림 후 표시된 숫자 수에 대해 22.8과 22.7999999가 모두 정확하다는 것을 의미합니다. 다음 숫자가 2이기 때문에 22.79999999999999999999999999999999999999999999오까지 표시되었으므로 표시된 값이 반올림 되었기 때문에 22.8000000이 아닙니다.

이것은 기본 의존적이며, 즉 한 숫자 기반에서 정확한 것들이 다른 숫자 기반에서 정확하지 않을 수 있습니다. 이 경우 10 진수베이스의 22.8은 이진수베이스에서 정확할 수 없습니다.

이것이 바로 nsdecimal이 존재하는 이유이며 플로팅 포인트가 금전적 값에 사용되지 않는 이유입니다.

이것은 기본 소수점에서 PI의 값을 표시하는 것과 다소 동일합니다. 숫자의 수는 무한하므로 모든 디스플레이에 대해 누군가가 몇 자리를 보여줄 수있는 모든 디스플레이에 대해 흥미롭게도 PI는 PI 번호 기반에서 정확하게 (그러나 유용하게) 표현 될 수 있습니다. :-)

의 경우 float 그리고 double 표현할 수있는 유한 한 숫자가 있습니다.

다른 팁

다음과 같이 시도하십시오 :-

[storedData replaceObjectAtIndex: myIndex    
 withObject: [NSNumber 
 numberWithFloat:22.8]];
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top