2012-04-05 32 views
6

我有一个TDateTime值(我从EndOfTheMonth(date)得到的结果)到一个变体类型。结果是错误的四舍五入。我们来看看例子:从EndOfTheMonth(日期)到变式值的错误转换

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:00:00的第二天,也就是TDateTime值(这基本上是一个double)非常接近整数(例如,41029.9999999884非常接近41029),因此VarToStr函数假设小数为数字模糊。

+2

'DateTimeToStr(V)'也显示正确的结果。显然,问题出在'VarToStr()'函数上。 – 2012-04-05 11:43:49

+0

http://www.devexpress.com/Support/Center/p/B223005.aspx所以他们错了? – JustMe 2012-04-05 11:46:25

+2

@AndriyM:没错,但是从来没有(?)错误太明确! :) – 2012-04-05 11:48:44