|
실수를 저장할때 님처럼 %3.2f 하면 정수 3자리 소수 2자리 가 저장 되는게 아닙니다.
정수 3자리 소수 2자리 로 저장하려면 %6.2f 로 해야 됩니다.
앞에 6은 소수점을 포함한 전체 자리수.
뒤에 2는 소수 자리수 입니다.
따라서 전체 자리수 6 자리에서 소수 2 자리 빼면 남는 자리수는 4 자리
여기서 소수점 한자리 빼면 정수 자리수는 3 자리가 됩니다.
이렇게 해줘야 정수 자리가 차이 나더라도 파일 저장시 밀리는 현상이 없습니다.
그냥 sprintf(buff,"%6.2f", atof(Edit->Text.c_str()) 해서 저장하면 되겠네요.
궁금이 님이 쓰신 글 :
: Edit에서 입력받은 실수를 파일로 저장하려 하는데 파일로 저장은 되는데
: 파일에 위치를 지정해서 저장하려고 합니다.
: 실수를 %3.2f 형태로 정수쪽을 3자리 소수점 이하를2자리로 넣으려고 하는데
: 제가 지금 한방법은 밑에와 같이 그부분을 제거하고 Insert 시키는식으로 했거든요.
: 근데 앞자리 정수쪽이 3자리가 아니라 1자리나 2자리숫자로 즉(12.30)이런식으로 들어오면 뒤에 1,2자리가
: 점점 밀리더군요 지울때는 6자리를 지우고 Insert 할때는 4자리나 5자리로 들어오게 되니 1,2자리가 점점 밀리더군요..
: 저장할때 실수형 자리가 6자리가 안되도 6자리로 입력을 받고 넣어주려고 하는데요..
: 어떻게 할수 있죠 알려주세요..
:
:
: AnsiString Buff;
: AnsiString Auff;
: a = StrToFloat(Fm_InputNumber->InputEdit->Text);
: TStringList *SL = new TStringList;
: SL->LoadFromFile("data\\data.txt");
: Buff = SL->Strings[15]; //15번째줄 불러오기
: Buff.Delete(23,6); //23번째 자리에서 6칸 지우기
: Auff=Buff.CurrToStrF(a,ffFixed,2); //소수점 이하2자리 표시
: Lbl_TemporaryTestTime->Caption=Auff;
: Buff.Insert(Auff,23); //23번째 자리에 넣기
: SL->Strings[15] = Buff;
: SL->SaveToFile("data\\data.txt");
: delete SL;
|