developer tip

C ++ cout이 과학적 표기법을 사용하지 않도록하는 방법

optionbox 2020. 12. 24. 23:37
반응형

C ++ cout이 과학적 표기법을 사용하지 않도록하는 방법


double x = 1500;
for(int k = 0; k<10 ; k++){
    double t = 0;
    for(int i=0; i<12; i++){
        t += x * 0.0675;
        x += x * 0.0675;
    }
    cout<<"Bas ana: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl;      
}

이것은 출력

Bas ana : 3284.78 Son faiz : 1784.78 Son ana : 5069.55

Bas ana : 7193.17 Son faiz : 3908.4 Son ana : 11101.6

Bas ana : 15752 Son faiz : 8558.8 Son ana : 24310.8

Bas ana : 34494.5 Son faiz : 18742.5 Son ana : 53237

Bas ana : 75537.8 Son faiz : 41043.3 Son ana : 116581

Bas ana : 165417 Son faiz : 89878.7 Son ana : 255295

Bas ana : 362238 Son faiz : 196821 Son ana : 559059

Bas ana : 793246 Son faiz : 431009 Son ana : 1.22426e + 006

Bas ana : 1.73709e + 006 Son faiz : 943845 Son ana : 2.68094e + 006

Bas ana : 3.80397e + 006 Son faiz : 2.06688e + 006 Son ana : 5.87085e + 006

과학적인 숫자가 아닌 정확한 숫자로 숫자를 표시하고 싶습니다. 어떻게 할 수 있습니까?


std::fixed스트림 조작기 사용 :

cout<<fixed<<"Bas ana: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl;

위에서 언급했듯이 std :: fixed를 사용하여 다음과 같이 문제를 해결할 수 있습니다.

cout << fixed;
cout << "Bas ana: " << x << "\tSon faiz: " << t << "\tSon ana: " << x+t <<endl;

그러나이 작업을 수행 한 후에는 프로젝트의 어느 곳에서나 float 또는 double을 인쇄 할 때마다이 고정 된 표기법으로 숫자가 인쇄됩니다. 사용하여 되돌릴 수 있습니다.

cout << scientific;

그러나 코드가 더 복잡해지면 지루할 수 있습니다.

이것이 Boost가 I / O Stream State Saver를 만든 이유입니다. 이것은 사용중인 I / O 스트림을 함수 호출 이전의 상태로 자동으로 반환합니다. 다음과 같이 사용할 수 있습니다.

#include <boost/io/ios_state.hpp> // you need to download these headers first

{
    boost::io::ios_flags_saver  ifs( os );

    cout << ios::fixed;
    cout<<"Bas ana: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl;

} // at this bracket, when ifs goes "out of scope", your stream is reset

Boost의 I / O Stream State Saver에 대한 자세한 정보 는 공식 문서 에서 찾을 수 있습니다 .

특히 국제화를 처리해야하는 경우 출력을 더 쉽게 만들 수 있는 Boost Format 라이브러리 를 확인할 수도 있습니다. 그러나이 특정 문제에 대해서는 도움이되지 않습니다.


형식 플래그를 사용할 수 있습니다.

추가 정보 : http://www.cplusplus.com/reference/iostream/ios_base/fmtflags/


다음 구문을 코딩하십시오.

std::cout << std::fixed << std::setprecision(n);

(n)소수점 정밀도의 수는 어디에 있습니까 ? 이것은 그것을 고칠 것입니다.


iostream으로 얻을 수있는 서식 지정 연산자의 전체 모음이 있습니다. 다음은 시작 하는 데 도움이되는 자습서 입니다.

참조 URL : https://stackoverflow.com/questions/5212018/how-to-make-c-cout-not-use-scientific-notation

반응형