2012-04-05 16 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時00分00秒次の日に非常に近いということで、つまり、(基本的にdoubleです)TDateTime値(例えば、41029.9999999884は、に非常に近い)整数に非常に近いので、VarToStr関数は、小数点が数値的な毛羽であると仮定します。

+2

'DateTimeToStr(V)'も正しい結果を示します。どうやら、問題は 'VarToStr()'関数にあります。 –

+0

http://www.devexpress.com/Support/Center/p/B223005.aspx彼らは間違っていますか? – JustMe

+2

@AndriyM:本当ですが、あまりにも明白であることは決して(?)間違っていることはありません! :) –

関連する問題