2012-11-28 3 views
2

가능한 중복 사용하여 C++에서 소수점 fileds 라운딩 동안 :
Does setprecision in c++ round? If so why am I seeing this?문제 setprecision에게

다음

내가

char* round(double value, int decimal_places) 
{ 
decimal_places = decimal_places+1; 
std::stringstream s2; 
    s2 << std::setprecision(decimal_places) << std::setiosflags(std::ios_base::fixed) << value; 
std::string st = s2.str(); 
    return st; 
} 

내 입력 값이 사용하고 기능입니다 0.89425이며 소수점 이하 자릿수는 4입니다.

내 출력은 0.8942이지만 0.8943이 필요합니다. 즉, 필요한 소수 자릿수 다음 자리가 다음 값보다 작 으면 출력이 다음 값으로 반올림되어야합니다.

답변

1

0.89425는 정확하게 2 진 부동 소수점으로 표현할 수 없습니다. 가장 정확하게 나타낼 수있는 값은 0.894249999999999989341858963598497211933135986328125이며 십진수 0.8942로 정확하게 반올림됩니다.

소수 반올림 동작을 보려면 고정 소수점 또는 소수 부동 소수점을 사용하십시오.