2010-08-11 4 views
3

예를 들어 2001.3666이 2001.37로 끝나기 때문에 여러 자릿수로 숫자를 올림하는 프로그램을 만들었습니다. 0.005를 곱한 후 100을 더하고 int로 변환 한 다음 다시 100으로 나눕니다.C++ 프로그램이 예상대로 작동하지 않을 때 double이 변환되어서는 안되는 경우

모든 것이 잘 작동하고, 아무런 문제도없고, 몇 가지 루프를 만들고 재미있는 것이 있었지만, 모든 것이 이상해졌습니다.

사용자가 입력 한 내용을 반복하여 사용자가 입력 한 실제 숫자 대신 반올림 한 숫자를 표시하는 프로그램의 첫 번째 줄이 표시됩니다.

#include <iostream> 
#include <string> 
using namespace std; 


int main() 
{ 
    cout << "enter: "; 
    double numberWithDecimalPlaces; 
    cin >> numberWithDecimalPlaces; 
    cout << "you entered " << numberWithDecimalPlaces << endl; 

    system("pause"); 
    return 0; 
} 

내가 2001.3666에 입력하고 프로그램이 간다 : 나는 새로운 프로젝트를 시작하고 신속하게하기 때문에, 그것은 내 코드 아니었다 결론에 도달 한 동안이 코드를 만든 후

나는에 그 코드 및 2001.37

정확한 출력 응답하지 않은 경우에도 줄 바꿈은 다음과 같습니다

enter: 2001.3666 
you entered 2001.37 

지금이 어떤없이 새로운 프로젝트에 새로운 프로그램입니다 cin >> 변수가 자동으로 반올림되지 않는 한, 이전 프로그램의 일부 코드가 여전히 메모리에 있고이 코드와 충돌하는 것처럼 보이지 않는 한, 이전 프로젝트와 동일한 변수 이름과 사용자 입력 값이 반올림됩니다.

다시는 그렇지 않을 수도 있습니다. ??

내가 표시 할 때 종종 반올림 WIN7에

답변

7

C++의 cout의 기본 정밀도는 6 자리이므로 2001.3666은 2001.37로 표시되지만 201.3666은 201.367로 표시되어야합니다.

는이 같은 정밀도를 높일 수 있습니다 :

#include <iomanip> 
... 
cout << "you entered " << setprecision(10) << numberWithDecimalPlaces << endl; 
+0

도움을 주셔서 감사합니다. 그 자체가 setprecision처럼 보이고, 저는 수학으로 반올림하기 위해 코드를 만드는 데 시간을 보내고, 빠른 답장을 보내 주셔서 감사합니다. – Joseph

3

번호 비주얼 스튜디오 2010을 사용하고 있습니다,하지만 당신은 얼마나 제어 할 수 있습니다. 읽기 http://www.cplusplus.com/reference/iostream/manipulators/setprecision/

+0

나는 인상 setprecision 아래에 있었다 단지 소수 자릿수를 자르고 아래로 둥글거나하지 않습니다. 나는 이것에 정말로 새롭고 나는 setprecision에 대해 읽었지만 분명히 내가 읽지 않은 책은 그것을 언급하는 것을 게을리했다. – Joseph

관련 문제