다음 두 줄의 출력은 NSString의 stringWithFormat 문이 숫자를 항상 반올림하지 않음을 보여줍니다. 그것은 정확하게 0.75에서 0.8로 반올림하는 것 같습니다. 그러나 0.25에서 0.25로 반올림됩니다. 여기에 코드가 있습니다.NSString 클래스가 숫자 서식을 지정할 때 일관성없는 이유는 무엇입니까?
NSString *sRoundedScore = [NSString stringWithFormat:@"%.1f", fScore];
NSLog(@"\r\n score before rounding: %f, rounded score: %@", fScore, sRoundedScore);
fScore 0.25로 할당 될 때, 출력은 :
score before rounding: 0.250000, rounded score: 0.2
fScore 0.75로 할당 될 때, 출력은 :
score before rounding: 0.750000, rounded score: 0.8
제가 사용하기 시작했다 이 NSNumberFormatter 일관되게 최대 얻을 수 있습니다. 왜 stringWithFormat이 결과에서이 변형을 생성합니까?
그렇다면 제안한대로 0.75를 반올림하면 왜 0.25를 내립니다. 그것이 내가 여기서 묻고있는 질문이다. 왜 어떤 경우에는 위로, 다른면에서는 아래로. – Alyoshak
.25 .2가 .5 (또는 .45)보다 작 으면 .25이므로 반올림됩니다 .55는 .6으로 반올림됩니다. 그러나 .5 이하인 경우 .26을 반올림하면 .26을 반올림합니다. 왜 그렇게하는지에 대한 저수준 논리가있을 것이라고 확신하지만, 그것이 그렇게한다는 것을 아는 것이 더 중요합니다. –
Thx Ben. 나는 그것이 그것을하는 이유보다 이것을하는 것을 아는 것이 더 중요하다는 데 동의하지 않는다. 귀하의 의견이 도움이되기 때문에, 나는 단순히 행동의 예가 아니라 행동의 설명을 얻기를 희망합니다. 소수 자릿수로 서식을 지정하면 결과가 임의적으로 보입니다. 데이비드의 대답은 유망하지만 아직 어떤 일이 일어나고 있는지, 구현시 0.25을 0.2499999999로 저장하지만 0.75를 0.74999999로 저장하지 않는지 아직 확인할 수 없습니다. – Alyoshak