2010-09-01 17 views
18

मैं एक calc कर रहा हूँ और जब तक डिबगिंग मैं इस पाया:1/252 = 0 सी # में?

double num = 1/252; 

जब मैं इस डिबग, संख्या शून्य हो जायेगा (0)। क्या इसका कोई कारण है? मैं इसे वास्तविक गणना करना चाहता हूं।

धन्यवाद

+17

जॉन स्कीट जो आपके प्रश्न का उत्तर है कि कोशिश करते हैं। इसे अपने सभी दोस्तों को दिखाएं। मैं। :) –

+0

संभावित डुप्लिकेट [सी # में डिवीजन जिस तरह से मैं उम्मीद करता हूं] नहीं जा रहा है (http://stackoverflow.com/questions/2400799/division-in-c-not-going-the-way-i-expect) –

उत्तर

30

हाँ - कि गणना पूर्णांक गणित में प्रदर्शन किया जा रहा है। इस प्रयास करें:

double num = 1.0/252.0; 

असल में, चर कि परिणाम गणित संचालन को प्रभावित नहीं करता है करने के लिए आवंटित किया जा रहा है के प्रकार का प्रदर्शन किया जा रहा है। दूसरे द्वारा एक पूर्णांक को विभाजित करने का परिणाम एक पूर्णांक है; यदि आप फ्लोटिंग पॉइंट अंकगणित का उपयोग करना चाहते हैं, तो आपको एक या अन्य ऑपरेटरों को एक फ़्लोटिंग पॉइंट प्रकार बनाना होगा। शाब्दिक के साथ ऐसा करने का एक आसान तरीका अंत में ".0" छड़ी है। एक अन्य विकल्प d प्रत्यय उपयोग करने के लिए है:

double num = 1d/252d; 

नोट है कि आप केवल वास्तव में एक संकार्य यह काम करने के लिए के लिए एक चल बिन्दु मूल्य बनाने की जरूरत है, लेकिन स्पष्टता के लिए मैं इस मामले में दोनों शायद चाहते हैं।

निश्चित रूप से शाब्दिक से कोई लेना देना आसान है कि है, लेकिन अन्य भाव (चर, विधि के कॉल आदि परिणाम) के लिए आप एक डाली उपयोग करने की आवश्यकता होगी: फिर

int x = 1; 
int y = 252; 
double num = (double) x/(double) y; 

, आप केवल कास्ट करने के लिए की जरूरत है उनमें से एक है, तो यह भी काम करेगा:

int x = 1; 
int y = 252; 
double num = (double) x/y; 

ध्यान दें कि यह विभाजन करने के लिए विशिष्ट नहीं है - यह अन्य अंकगणितीय ऑपरेटर भी प्रभावित करता है।

+6

या , यदि आपके पास पूर्णांक वर्र्स हैं, तो उनमें से एक को दोगुना करने के लिए: (डबल) ए/बी। –

+0

@ वादीम: हाँ, अच्छा बिंदु - मैं इसे संपादित कर दूंगा। –

9

1 और 252 दोनों शाब्दिक पूर्णांक हैं, इसलिए गणना पूर्णांक गणित का उपयोग करती है। 0 निकटतम पूर्णांक परिणाम है। उचित डबल मान प्राप्त करने के लिए 1.0 या 252.0 का उपयोग करें।

7

आप 2 ints विभाजित और एक डबल कास्ट कर रहे हैं,

double num = 1d/252d; 
संबंधित मुद्दे