2011-09-29 4 views
0

나는 하나의 사소한 문제에 직면 해 있었고, 나는 궁금해한다. 왜?문자열의 정수 값을 가진 float 형식 변수

여기에서 우리는 몇 가지 문자열이 있습니다

[NSString [email protected]"%.3f/%.3f/%.3f/%i", 1.0, 1.0, 1, 1]; 

이 경우에는, 결과는 34,875,689 같은 1.000/1.000/1/ABRA - kadabra입니다. 왜 그렇게됩니까? 물론, 우리가 세 번째 값을 1.0으로 변경하면 모든 것이 괜찮을 것입니다. 제발,이 수술의 진수를 설명해주세요.

답변

2

%f을 작성 했으므로 컴파일러는 float을 예상하지만 int을 인식합니다. 1.0 대신 1을 쓰면 부동 소수점 상수 인 1.0 대신 정수 상수가됩니다.

+0

예. 모든 것이 정확합니다. 그러나, 나는 그것이 왜 네 번째 가치에 나쁜 영향을 미치는지 궁금합니다. +1 – Vov4yk

+0

오, 나는 컴파일러가 그들의 타입에 관한 정보를 저장하지 않고 서로 옆에 4 개의 값을 저장한다고 가정한다. 그래서 런타임 중에 포맷 문자열이 채워지면 포맷 지시자와 그에 상응하는 바이트 수가 채워집니다. 정수는 float보다 적은 바이트로 표현되기 때문에 혼란스럽고 지정된 플로트를 채우기 위해 메모리에서 약간의 쓰레기가 걸립니다. – user387184

+0

hm. 그것은 사실 인 것처럼 보인다. 그것은 꽤 낯설다. – Vov4yk

관련 문제