2

의 행동에 내가 그것을 setprecision 기능을 이해하는 바와 같이 최소한의 정밀도를 지정하지만 다음 코드를 실행할 때 소수점 이하에만 3 개의 숫자 얻을 :C++ 정밀도 - setprecision

int main() 
{ 
    double a = 123.4567890; 
    double b = 123.4000000; 
    std::cout << std::setprecision(5) << a << std::endl; // Udesireble 
    std::cout.setf(std::ios::fixed); 
    std::cout << std::setprecision(5) << a << std::endl; // Desireble 

    std::cout << std::setprecision(5) << b << std::endl; // Udesireble 
    std::cout.unsetf(std::ios::fixed); 
    std::cout << std::setprecision(5) << b << std::endl; // Desireble 
    return 0; 
} 

인쇄 :

123.46  // Udesireble 
123.45679 // Desireble 
123.40000 // Udesireble 
123.4  // Desireble 

고정 설정할지 여부를 알 수있는 나 자신을 위해 소수점 자리의 수를 확인 피할 수있는 방법이 있습니까?

답변

1

내 인상은 처음 string로 포맷 한 다음 공백 후행 0을 교체해야한다는 것입니다.

+0

이있을 수 있습니다, 이것은 지금까지 일을하는 유일한 솔루션입니다,하지만 난 C++ 난 그냥 아니에요 더 우아한 뭔가가있을 수 있음을 단지 확신했다 인식. – SadStudent

+0

@SadStudent 귀하의 요구 사항은 드뭅니다. 일반적인 (그리고 :-(제로 충전) 소수 자릿수의 고정 번호를 가지고하는 것입니다. 그것은 당신이 질문이 매우 좋다. –

0

스트림의 경우, 두 가지 기능을 사용할 수 있습니다. 기록 할 문자 세트 setfill(char_type c)은 필요한 문자 (자세한 내용 here)

표시하는 값 필드의 폭을 설정 setw (INT) 함수가 수와 일치한다. (문서 here)

이러한 기능을 사용하면 솔루션 슬프게도

+0

에서 가장 그들이 나를 추가 추가 할 수 있습니다 때문에 내가 그 기능을 사용하여 해결할 수있는 방법을 볼 수 없습니다 나는 내가 그 시도했습니다 예제 코드에서 언급하지만 그것이 내가 의미하지 않을 경우 유적으로 난 그냥 포인트 – SadStudent

+0

후 5 자리까지 원하는 싶지 않아 내가 쓴 결국 예를 들어 제로 그것은 "고정"때문에 후행 0을 찾고, 나는 스트림에 넣고 싶을 때마다 모든 숫자를 체크하지 않는 방법을 찾고있다. – SadStudent