2013-07-15 9 views
5

मुझे लगता है कि मेरी तर्क त्रुटिपूर्ण है ....अनुमानित समय शेष, मुझे क्या याद आ रही है?

एक पाश में

मेरे पास है:

int seconds = (int) (elapsed.TotalSeconds/ItemPos) * (Count - ItemPos); 

इस पाश लगभग एक बार प्रति सेकंड अद्यतन करता है ....

समस्या मेरे पास है

कि है सेकंड हमेशा शून्य (0) मान के साथ समाप्त होता है।

ऐसा इसलिए है क्योंकि ItemPos मान elapsed.TotalSeconds से पहले लूप के बाद हमेशा उच्च होता है।

इसलिए उदाहरण के लिए

:

अगर 3 सेकंड

ItemCount = 20 , so 3/20 = 0.15 - rounds to zero.... 0 * anything = 0...... 

क्या मैं गलत कर रहा हूँ पारित?

+2

आपका पहला विभाजन 0. कास्ट करने के लिए गोलाई है करने के लिए ऑपरेंड (: अपने अभिव्यक्ति

((int)(elapsed.TotalSeconds/ItemPos)) * (Count - ItemPos); 

आप प्रकार कलाकारों में देरी करने के लिए है के रूप में व्याख्या की है, आप सभी की जरूरत () की एक अतिरिक्त जोड़ी है फ्लोट) पहले। – EricLaw

+1

@EricLaw: TimeSpan TotalSeconds एक 'डबल' – dtb

+0

@EricLaw है - बहुत अच्छा ... मैं समाधान जोड़ूंगा ... –

उत्तर

6

पूर्णांक विभाजन हमेशा एक पूर्णांक देता है, और जब अपने परिणाम 0.something होगा, यह 0.

को छोटा है कुछ एक वास्तविक मूल्य है, और तुम ठीक हो। या, विभाजित करने से पहले गुणा करें:

int सेकंड = (int) ((फ्लोट) कुल सेकेंड/आइटमपॉस समाप्त हो गया) * (गणना - आइटमपॉस);

(नीचे देखें)

या

int seconds = (int) (elapsed.TotalSeconds * (Count - ItemPos)/ItemPos); 

संपादित

DTB की टिप्पणी के आधार पर, मुझे लगता है मैं wrongplace में मेरे समान किरदार डाल एहसास। मेरी पहली पंक्ति काम नहीं करेगी (हालांकि मेरा दूसरा अभी भी होगा)। क्या हो रहा है कि आप कुल सेकेंड से डबल वैल्यू ले रहे हैं और इसे डबल करने के लिए इसे int ItemPos से विभाजित कर रहे हैं।

int seconds = (int) ((elapsed.TotalSeconds/ItemPos) * (Count - ItemPos)); 
+2

ओपी के कोड में कोई पूर्णांक विभाजन नहीं है (मान लीजिए कि' elapsed' एक टाइमस्पैन है) । समस्या '(int)' कास्ट की स्थिति है। – dtb

+2

यदि आपके पास गैर-ऋणात्मक 'x' और सकारात्मक 'y' है, जहां' x dtb

+0

@dtb इसे आगे के माध्यम से सोचा, आप सही हैं। –

8

: लेकिन फिर आप इसे एक पूर्णांक है, जो आप जहां यह 0 पर सेट के रूप में हेंक Holterman ने कहा कि आप अतिरिक्त कोष्ठक जोड़ने के लिए इतना है कि typecasting पूरे विभाजन खत्म हो गया है पाने के लिए कास्टिंग कर रहे हैं

//int seconds = (int) (elapsed.TotalSeconds/ItemPos) * (Count - ItemPos) ; 
    int seconds = (int) ((elapsed.TotalSeconds/ItemPos) * (Count - ItemPos)); 
संबंधित मुद्दे