从EndOfTheMonth(date)到Variant值的转换错误

Jus*_*tMe 6 delphi datetime rounding variant delphi-xe2

我有一个TDateTime值(我得到的结果EndOfTheMonth(date))变量类型.结果错误地四舍五入.我们来看看例子:

  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?
Run Code Online (Sandbox Code Playgroud)

它是设计行为吗?如何解决这个问题?

And*_*and 6

ShowMessage(DateTimeToStr(data) + ' vs ' + DateTimeToStr(VarToDateTime(V)));
Run Code Online (Sandbox Code Playgroud)

更新:我猜测问题是该月的最后一毫秒非常接近第二天的0:00:00,也就是说,该TDateTime值(基本上是一个double)非常接近一个整数(例如41029.9999999884非常接近) to 41029)所以VarToStr函数假设小数是数字模糊.

  • `DateTimeToStr(V)`也显示正确的结果.显然,问题在于`VarToStr()`函数. (2认同)
  • @AndriyM:是的,但过于明确,从来没有(?)错误!:) (2认同)