// DooBunCho 는 지도의 도분초를 의미함
type
PDooBunCho = ^TDooBunCho;
TDooBunCho = record
Doo, Bun, Cho : SmallInt;
end;
function DegreeToDooBunCho(Degree: Double): TDooBunCho;
var
C : TDooBunCho;
A : Double;
begin
C.Doo := Trunc(Degree); // 도 취하기
Degree := Frac(Degree); // 소수점만을 취한다.
Degree := Degree * 60; // 분을 계산하기 위해 60 곱함
C.Bun := Trunc(Degree); // 분 취하기
Degree := Degree - C.Bun; // 분 빼기
A := Degree * 60; // 초 로 계산하기 위해 60 곱함
C.Cho := Trunc(A);
Result := C;
end;
// 델파이 7.0 사용중입니다.
// 위의 함수에서 인수로 Degree := 37.98 일때
// C.Cho 가 48 이 나와야하는데 47 이 나옵니다.
// A 가 틀림없이 48 인데
// Trunc(48) 함수를 거치면 리턴값이 47이 됩니다.
// 원인을 아시는분 알려주시면 좋겠습니다.
48.0 들어갈 자리에 47.999996967979797979 이런식으로 들어가네요.
<!--CodeS-->
Memo1.Lines.Add(FloatToStrF(Degree,ffFixed ,40,40) ); // debug