2011-01-03 15 views
5

मैं कुछ गूंगा कर रही होगी:सरल विभाजन

float ans = (i/3); 

तो क्यों जब i = 7 ans 2.0 पर बाहर आ रहा है?

i किसी पूर्णांक

उत्तर

11

क्योंकि / operator एक पूर्णांक विभाजन प्रदर्शन कर रहा है, तो दोनों ऑपरेंड पूर्णांक हैं यह है। आप ऐसा कर सकता है:

float ans = (i/3.0f); 
+1

उपयुक्त एमएसडीएन पृष्ठ को जोड़ने के लिए बोनस +1। –

+0

इसके लिए बहुत धन्यवाद - लेकिन "एफ" संख्या को अलग क्यों करता है? –

+2

@ m.edmondson: न्यूमेरिक प्रत्यय संकलक को संकेत देते हैं कि एक शाब्दिक संख्या को एक निश्चित प्रकार के रूप में माना जाना चाहिए। यह '(फ्लोट) 3.0' के लिए लघुरूप है – Tony

6

आप अन्यथा गणना पहले (जो हमेशा एक पूर्णांक में परिणाम है), एक नाव के लिए परिणाम परिवर्तित करने से पहले पूर्णांकों के साथ किया जाता है, ऑपरेंड एक नाव में से एक बनाने की जरूरत है।

float ans = ((float) i)/3; 
0

यह पूर्णांक विभाजन कर रहा है क्योंकि i एक int और 3 एक int है। इस प्रयास करें:

float ans = ((float)i/3.0f); 
0

उपयोग float ans = (i/3.0) या float ans = (i/3f) या float ans = ((float)i/3)/ एक पूर्णांक विभाजन करता है यदि दोनों पक्ष प्रकार पूर्णांक हैं।

0

बहुत सरल: सी #, int/int = int में।

0

क्या आप के लिए देख रहे हैं:

float ans = ((float)i/3); 

नहीं तो आप दो पूर्णांकों ले जा रहे हैं और उन्हें विभाजित पूरे समय की संख्या भाजक लाभांश में चला जाता है पता लगाने के लिए। (जैसा कि बताया गया है, गंतव्य प्रकार के बावजूद एक int/int = int। और, कंपाइलर के लिए, "3" एक और पूर्णांक है (जब तक कि आप इसे 3.0f के रूप में निर्दिष्ट नहीं करते))

0

मुझे लगता है कि आपके पास यह है किसी तरह का लूप। आप अपने i वैरिएबल को इसके बजाय फ्लोट के रूप में निर्दिष्ट कर सकते हैं।

for (float i = 0; i < 10; i++) 
{ 
    float ans = (i/3); 
    // statements 
} 

बस एक और समाधान।

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