2014-12-18 4 views
3

그래서 저는 C++ 프로젝트를 만들고 있습니다. -0Cout long double issue

이미 setprecision를 사용하려고 모든 : 나는 긴 double 형의 VAR을 가지고 있고 그것을 "1.02"그럼

, 나는 그것을 인쇄 할 cout을 사용하려고 같은 값을 할당하고, 결과는 나는 문제를 인터넷 검색을 발견했다.

이 해결책은 무엇입니까?

예제 코드 :

#include <cstdlib> 
#include <iomanip> 

using namespace std; 

int main(int argc, char** argv) 
{ 

    cout.precision(15); 
    long double var = 1.2; 
    cout << var << endl; 
    return 0; 
} 

OS : 윈도우 8.1 64 비트 컴파일러 :는 MinGW IDE : 넷빈즈

+2

컴파일러 및 OS 버전과 함께 전체 프로그램을 편집하지 않습니다. –

+0

나를 위해 작동합니다. 컴파일러 버전은 무엇입니까? –

+2

이것은 MinGW의 잘 알려진 문제점입니다. MinGW는 Microsoft 라이브러리를 사용합니다. Microsoft의 컴파일러는 long double을 64 비트 형식 (double과 동일)으로 구현하고 있으며 라이브러리는 동일하게 기대합니다. 그들의 라이브러리는 MinGW가 사용하는 80 비트 long-double 포맷을 이해하지 못합니다. –

답변

-1

8.0.2 나는 모든 코드에서 잘못된 아무것도 볼 수 없습니다. 난 그냥 표준 형식으로 넣고 작동합니다. 여기 게시 한 내용이 전부라고 가정 할 때 코드가 있습니다.

#include <iostream> 

using namespace std; 

int main(){ 
    long double var = 1.0202; 
    cout.precision(5); 
    cout << var << endl; 
} 

이 질문에 대한 답변입니다.

편집 : P. 더 짧을수록, 더 나은 해결책을 얻을 수 있습니다.

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

int main(){ 
    long double var = 1.0202; 
    //cout.precision(5); 
    cout << setprecision(5) << var << endl; 
} 

나는이 것이 더 짧기 때문에 더 좋다고 생각합니다. printf는 어떤 변수 (몇 개가있는 경우)에 소수 또는 얼마만큼을 선택할 수 있기 때문에 더 복잡한 십진수를 쓰는 경우 printf를 사용하는 것이 좋습니다.

-3

방금 ​​문제를 발견했습니다. iostream 대신 cstdlib가 포함되었습니다.

0

이것은 쉬운 방법이지만 프로그램이 제 컴파일러에서 작동했습니다.

#include <cstdlib> 
#include <iomanip> 
#include <iostream> 

using namespace std; 

int main(int argc, char** argv) 
{ 

    std::setprecision(10); 
    long double var = 1.023563457578; 
    cout << var << endl; 
    return 0; 
} 

여러분의 컴파일러가 실제로 문제가 있음을 알기를 바랍니다.

소스 ->Link

2

은 컴파일러에 문제가 될 것으로 보인다. http://mingw.5.n7.nabble.com/Strange-behaviour-of-gcc-4-8-1-with-long-double-td32949.html

사용 printf 또는 cout에 전달하기 전에 double에 변수의 값을 변환 : 여기를보세요. (BTW는 80- 비트 정밀도가 필요하다고 확신합니까?)

+1

보다 구체적으로이 문제는 I/O에서 발생합니다. 80 비트 longdoubles는 정상적으로 작동합니다. 이 문제를 해결하는 가장 좋은 방법은 [printf ("% Lg");] (http://stackoverflow.com/a/14871560/1143274)와 같습니다. 링크 된 토론 스레드는 'g ++'이 작동하려면이 것이 필요하지만 나에게는 어느 쪽이든 작동한다. –