2012-01-24 2 views
2

난 열에 정렬 된 텍스트 파일에 숫자 값을 쓰려고합니다. 내 코드는 다음과 같습니다.ofstream에 기록 된 숫자에 패딩 0을 추가하려면 어떻게해야합니까?

ofstream file; 
file.open("try.txt", ios::app); 
file << num << "\t" << max << "\t" << mean << "\t << a << "\n"; 

값의 자릿수가 같지 않으면 정렬되지 않습니다. 내가 원하는 것은 다음과 같습니다 :

1.234567 -> 1.234 
1.234  -> 1.234 
1.2  -> 1.200 
+0

[C++ 스트림 출력과 소수점 이하 3 자리 숫자의 가능한 중복. 어떻게?] (http://stackoverflow.com/questions/8554441/c-stream-output-with-3-digits-after-the-decimal-point-how) –

답변

5

원하는 형식에 따라 다릅니다. 고정 소수점 자리를 들어, 무엇인가 :

class FFmt 
{ 
    int myWidth; 
    int myPrecision; 
public: 
    FFmt(int width, int precision) 
     : myWidth(width) 
     , myPrecision(precision) 
    { 
    } 
    friend std::ostream& operator<<(
     std::ostream& dest, 
     FFmt const& fmt) 
    { 
     dest.setf(std::ios::fixed, std::ios::floatfield); 
     dest.precision(myPrecision); 
     dest.width(myWidth); 
    } 
}; 

트릭을 할해야한다, 그래서 당신은 쓸 수 있습니다 :

file << nume << '\t' << FFmt(8, 2) << max ... 

(또는 무엇이든 폭 및 정밀 당신이 원하는).

부동 소수점 연산을 수행하는 경우, 많은 경우에 논리적 조작자를 사용하는 것이 더 적절할 것이지만 ( ) 데이터의 형식, 예 : 학위, 거리 등).

IMHO, 조작자를 확장하여 형식화 상태를 저장하고 전체 표현식의 끝에서 복원 할 가치가 있습니다. (모든 manipulator는 이것을 처리하는 기본 클래스에서 파생됩니다.)

2

먼저 정밀도를 변경해야합니다.

좋은 예가 here입니다.

+0

대답은 첫 번째 beeing에 대한 것입니다 – andrea

+0

당신이 필요합니다 출력이 고정 형식임을 지정하려면 정밀도를 지정하고 각 출력의 너비를 지정하십시오. –

+0

고마워, andrea,하지만 나는 [제임스의 대답] (http://stackoverflow.com/a/8985852/255756)을 수락하는 것이 좋습니다. 그것은 더 자세한 방법입니다. –

4

std::fixed, std::setw()std::setprecision()을 살펴보십시오.

+0

그리고 고정 된 형식이 사용되는지 확인하십시오. –

+0

@ JamesKanze : 좋은 지적, 고마워! 답변이 업데이트되었습니다. – NPE

2

cout을 사용할 때와 같은 방법입니다. this answer을 참조하십시오.

관련 문제