2014-07-13 1 views
-12

Dev C++ 컴파일러를 사용하여 포인터의 멋진 사용법을 이해하고 있는데, 이것은 내가 실제로 알고 싶어하는 것으로 관찰되었습니다.C++에서 double 변수의 큰 값을 반올림하는 이유는 무엇입니까?

위 그림에서 d 값을 52.xxx로 사용할 때 그리고이 값의 라운드하지 않는 그 부동 소수점 표현에서와 같이 값을 출력 인쇄 기능에 전달, 이제 다음 도면을보고 -

#include<iostream> 
using namespace std; 
int main(){ 
    double d = 52.664; 
    cout << d << endl 
} 

코드의 출력 52.664

(d = 56455.66456) 다음 값에서 반올림합니다. 이유는 무엇입니까? 누군가 C++ 컴파일러가 여기에서하는 것처럼 보이는 것에 대한 행동을 설명 할 수 있습니까?

+17

대신 이미지를 제거하고 대신 코드 및 텍스트 출력으로 바꿀 수 있습니까? –

+1

초기화 후'std :: basic_ios'의 기본 설정 ('init()')은 6 자리의 유효 자릿수와 고정 된 부동 소수점 형식의 정밀도입니다 (C++ 11 § 27.5.5.2 참고). – WhozCraig

+0

'8d'와 같이 '8'은 무엇입니까? 컴파일러 오류가 아닌가요? –

답변

5

표준 라이브러리는 기본적으로 "중간 접지"수준의 정밀도를 선택합니다. 그래도 조정할 수 있습니다.

#include <iostream> 
#include <iomanip> 

int main() { 
    std::cout << "Default precision: " << 526686.6664 << "\n" 
       << "Chosen precision: " 
       << std::setprecision(10) << 526686.6664 << "\n"; 
} 
1

double 값을 인쇄 할 때 십진수 6 자리의 정밀도가있는 것 같습니다.

관련 문제