2012-04-05 8 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))); 

अद्यतन: मुझे लगता है कि होगा समस्या यह है कि महीने के अंतिम मिलीसेकंड बहुत 00:00:00 अगले दिन के करीब है है, कि है, TDateTime मान (जो मूल रूप से एक double है) एक पूर्णांक के बहुत करीब है (उदाहरण के लिए 41029.999999988441029 के बहुत करीब है) और इसलिए VarToStr फ़ंक्शन दशमलव को संख्यात्मक फ़ज़ मानता है।

+2

'डेटटाइम टीओएसआरआर (वी)' सही परिणाम भी दिखाता है। जाहिर है, मुद्दा 'VarToStr()' फ़ंक्शन के साथ है। –

+0

http://www.devexpress.com/Support/Center/p/B223005.aspx तो वे गलत हैं? – JustMe

+2

@AndriyM: सच है, लेकिन यह कभी भी स्पष्ट नहीं है (?) बहुत स्पष्ट होना गलत है! :) –

संबंधित मुद्दे