2017-11-12 56 views
2

내가 최대 10 소수점 이하 자릿수로 C++에서 double 값을 캐릭터 라인 화하고 싶은, 그래서 나는 그러나C++에서 소수점 이하 하나 이상을 인쇄 하시겠습니까? <code>value</code> 어떤 정확한 적분 값과 같은 4.0이있는 경우,

std::stringstream s; 
double value = 3.1415926; 
s << "value is " << std::setprecision(10) << value; 

같은 것을 사용, 나는 그것이 4.0하지를 인쇄하려면 단지 4. C++ stringstream 또는 예전의 snprintf()으로이 작업을 수행 할 수있는 방법이 있습니까?

지금까지 내가 생각할 수있는 유일한 해결책은 valuefloor(value)에 비교하는 것입니다 : 내가 필요하다면

std::stringstream s; 
if (floor(value) == value) 
    s << std::setprecision(1) << std::fixed << value; 
else 
    s << std::setprecision(10) << value; 

내가 그 해결책을 유지하는 것입니다,하지만 난 어떤 내려다 보이는 해요 경우 궁금 조건부를 피할 수있는 iostream 가제트.

답변

1

사용 std::fixed :

s << "value is " << std::fixed << std::setprecision(10) << value; 

Live Demo


업데이트 : 나는 당신이 찾고있는 무슨 오해 생각합니다. std::fixed만으로는 풀 수있는 정밀도 1과 소수점 이하 자릿수 10을 사용하여 해결하려는 문제를 해결할 수 없습니다. 당신은 (편의상, 나는 무한 NaN이 무시하지만 실제 코드에서 차지하고 있는지 확인하십시오 것)들을 구분하는 std::modf()을 사용할 수 있습니다 예 :

#include <cmath> 
std::stringstream s; 
double integral; 
if (std::modf(value, &integral) == 0) 
    s << std::fixed << std::setprecision(1) << integral; 
else 
    s << std::fixed << std::setprecision(10) << value; 
나는 당신의 대답에 의해 혼란스러워했다
+0

, I 때문에 내 자신의 조건부 솔루션에서'std :: fixed'를 이미 사용하고 있습니다. 그러나 상관없이, 나는 당신의 "라이브 데모"를 체크하고, 원하는 출력을 생성하지 않고있다. '4.0000000000'이 아닌'4.0' (정확한 적분 값의 특별한 경우)을 출력 할 필요가 있습니다. –

+0

@ RyanV.Bissell 그럼 당신은 당신 자신의 질문에 답했습니다. 정밀도를 조건부로 설정해야합니다. –

+0

그렇다면 누군가가 ""또는 ""도구가 없으면 직접 목표를 달성 할 수 있습니다. 조건부로 계속해야 할 것입니다. "동의하겠습니다. –