값 22.8은 바이너리 플로팅 포인트에서 정확하게 표현할 수 없습니다. 당신이보고있는 것은 디스플레이 형식을 기반으로 한 표현입니다. 다른 디스플레이 방법마다 다른 디스플레이 형식을 사용할 수 있습니다. 다른 수의 숫자와 반올림은 반올림 후 표시된 숫자 수에 대해 22.8과 22.7999999가 모두 정확하다는 것을 의미합니다. 다음 숫자가 2이기 때문에 22.79999999999999999999999999999999999999999999오까지 표시되었으므로 표시된 값이 반올림 되었기 때문에 22.8000000이 아닙니다.
이것은 기본 의존적이며, 즉 한 숫자 기반에서 정확한 것들이 다른 숫자 기반에서 정확하지 않을 수 있습니다. 이 경우 10 진수베이스의 22.8은 이진수베이스에서 정확할 수 없습니다.
이것이 바로 nsdecimal이 존재하는 이유이며 플로팅 포인트가 금전적 값에 사용되지 않는 이유입니다.
이것은 기본 소수점에서 PI의 값을 표시하는 것과 다소 동일합니다. 숫자의 수는 무한하므로 모든 디스플레이에 대해 누군가가 몇 자리를 보여줄 수있는 모든 디스플레이에 대해 흥미롭게도 PI는 PI 번호 기반에서 정확하게 (그러나 유용하게) 표현 될 수 있습니다. :-)
의 경우 float
그리고 double
표현할 수있는 유한 한 숫자가 있습니다.