2012-09-12 3 views
1

다음 프로그램을 실행하려고하는데 작동하지만 소수점 이하 6 자리를 입력하면 반올림되거나 잘린 상태로 유지됩니다. 2.999999 -> 3. 어떻게하면 멈추게 설정합니까?입력 한 숫자 만 유효 숫자 6 자로 읽습니까?

int main() 
{ 

    double n=0, x=0; 

    while (cin >> n >> x) //will keep going until an integer is not entered 
    { 
     cout << "You entered the two integers " << x << " and " << n << endl; 

     if (x-n <= (1.0/10000000) && n-x <= (1.0/10000000)) 
      cout << "The numbers are almost equal" << endl; 
    } 

return 0; 

} 
+2

당신이 입력을 절단/반올림, 또는 대신 출력에 무슨 일이 일어나고 있는지 있습니까? IIRC, doubles에 대한'cout'의 표준 형식은 달리 말해서 적절한 플래그를 설정하지 않는 한 6 자리 정도를 기본으로합니다 ... – twalberg

+0

예지 출력에서 ​​발생합니다 ... – Physbox

+0

두 가지 제안 사항. 첫째, 주석과 텍스트는 "정수"를 참조하지만 값은 double 유형입니다. 이것은 아마도 수정되어야합니다. 둘째, 'abs (x - n);'을 사용하면 테스트가 더 간단해질 수 있으므로 테스트가 하나만 필요합니다. –

답변

1

당신은 std::setprecision를 사용하여 인쇄 값의 정밀도를 변경할 수 있습니다

cout << "You entered the two integers " << setprecision(20) << x 
    << " and " << n << endl; 

Link to ideone.

+0

내가 처음 선언 한 곳에서 즉, n과 x? – Physbox

+1

@ user1542646 절대적으로 - 프로그램의 어느 부분 으로든'cout << setprecision (20);'을 자유롭게 이동할 수 있습니다. 정밀도는 다른 값을 설정할 때까지 유효합니다. – dasblinkenlight

+0

오 대단한 도움을 위해. – Physbox