2012-04-05 6 views
6

TDateTime 값 (이 결과는 EndOfTheMonth(date)에서 얻음)을 변형 유형으로 사용하고 있습니다. 결과가 잘못 반올림되었습니다. 예를 들어 보겠습니다.EndOfTheMonth (날짜)에서 Variant 값으로의 변환이 잘못되었습니다.

data := EndOfTheMonth(date); 
    V := data; 
    ShowMessage(DateTimeToStr(data) + ' vs ' + VarToStr(V)); 
// output is 
// data = 2012-01-31 23:59:59 
// v = 2012-02-01   // why next day? 

동작이 설계 되었습니까? 어떻게 해결할 수 있습니까?

답변

6
ShowMessage(DateTimeToStr(data) + ' vs ' + DateTimeToStr(VarToDateTime(V))); 

업데이트 : 것 같아요 것이 문제가 월의 마지막 밀리 초 0시 0분 0초 다음날 매우 가까운 것입니다, 즉, (기본적으로 double 임) TDateTime 값 예를 들어 41029.9999999884이 매우 가까운 숫자 인 41029에 가까워서 VarToStr 함수는 십진수를 숫자로 처리한다고 가정합니다.

+2

'DateTimeToStr (V)'는 올바른 결과도 보여줍니다. 분명히이 문제는'VarToStr()'함수와 관련이 있습니다. –

+0

http://www.devexpress.com/Support/Center/p/B223005.aspx 그들이 잘못 되었나요? – JustMe

+2

@AndriyM : 그렇습니다. 그러나 너무 명백한 것은 잘못입니까? :) –