C++은 (대신 반올림 반올림)는 0을 향해 라운딩 및 플로트가 aproximate 값을 저장할 수 있기 때문에 정확하지 않을 수있는 있기 때문에 (예 0.9999997f) 당신은 당신이 마주 치고있는 결과를 얻습니다.
+0.001을 추가하는 것이 좋습니다.가장 가까운 쪽을 반올림하고 싶다면 0.5f를 더한 다음 C++이 그 내용을 반올림하도록합시다.
float closerToFive = 5.454f;
float closerToSix = 5.545f;
int five = static_cast<int>(closerToFive + 0.5f);
int six = static_cast<int>(closerToSix + 0.5f);
"순진한 방법"일 수도 있지만 잘 작동합니다. 당신이 많이 그것을 할 경우 FUNC에 랩 :
이
constexpr int ftoi(float value)
{
return static_cast<int>(value + (value > 0.0f? 0.5f : -0.5f));
}
ftoi(5.454f) -> 5
ftoi(5.545f) -> 6
ftoi(-5.454f) -> -5
ftoi(-5.545f) -> -6
http://ideone.com/gDT4GP
편집 :이 CasperGhost의 대답에서 알 수 있듯이, 계정 부정적인 수레에 걸릴 잊으. ftoi() 함수가 수정되었습니다.
여기서'0.1'은 무엇이라고 생각하십니까? 나는 그것이 당신의 "순진한 길"이라고 생각합니다. –
나는 이걸로 무엇을 하려는지 잘 모르겠다. –
나는 0.5를 사용해야한다는 것을 알고있다. 그러나 나는 왜 내가 사용하는지 알지 못한다. – snowying