6

バリアント型の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?

設計された動作ですか?これを回避する方法は?

4

1 に答える 1

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

更新:問題は、月の最後のミリ秒が翌日の0:00:00に非常に近いこと、つまり、TDateTime値(基本的にはdouble)が整数に非常に近いこと(たとえば、非常に近いこと)41029.9999999884だと思います。 to 41029)であるため、このVarToStr関数は小数を数値ファズと見なします。

于 2012-04-05T11:39:38.073 に答える