|
일단 float는 정밀도에 문제가 있기 때문에
특정 자리 밑으로 깔끔하게 끊어 내는게 잘 안됩니다.
그래서 정밀도가 높고 특정 자리 밑으로 깔금하게 끊어지는 double 로 변환한뒤 자리수 밑으로 끊어내는게 좋습니다.
방법은 여러가지가 있을 수 있는데
한가지 예로 아래처럼 처리하시면 쉽게 됩니다.
float v = -13.23423453254235;
Form1->Aclr10m11H_MainApaEdt->Text = (int)((double)v * 100) / 100.0;
위 방법은 절사 방법이고
만일 잘라나가는 자리에서 반올림을 해야 하면
String의 printf 메소드로 %3.2f 로 하면 깔끔하게 됩니다.
이럴때는 double 로 변환할 필요도 없기 때문에 가장 쉬운 방법이 되겠습니다.
float v = -13.23423453254235;
Form1->Aclr10m11H_MainApaEdt->Text = String().sprintf("%3.2f", v);
최남영 님이 쓰신 글 :
: 안녕하세요
: 통신으로 입력받은 아스키값을 FLOAT형으로 변환하여 EDIT창에 표시한는데 소수점 15자리까지 표시되네요
: 이것을 소수점 2자리까지 표시하고 싶은데 ..도저히 모르겠어요 중간에 sprintf를 사용해서 %3.2f로 스트링 변환해서도 해봤지만
: 안됩니다. 아마도 edit 창의 limit 옵션 설정이 있는것 같은데요.. MaxLength가 있긴 한데 이것은 키보드로 직접 입력시에만 제한이 되네요
: 방법 아시는분 도움 부탁드립니다.
:
:
:
: Aclr10M_Low=(atof( pBuffer ));
: Form1->Aclr10m11H_MainApaEdt->Text=Aclr10M_Low;
:
: 결과: -13.23423453254235
: 원하는값: -13.23
|