2010-11-04 15 views
20

मैं गुणा और float एस और int एस का विभाजन कर रहा हूं और मैं निहित रूपांतरण नियम भूल जाता हूं (और प्रश्न में शब्द यहां पूछने से अधिक तेज़ी से Google के लिए अस्पष्ट लगते हैं)।फ्लोट/इंट निहित रूपांतरण

यदि मेरे पास दो int एस हैं, लेकिन मैं फ़्लोटिंग-पॉइंट डिवीजन करना चाहता हूं, तो क्या मुझे केवल एक या दोनों ऑपरेटरों को डालने की आवश्यकता है? गुणा के बारे में कैसे - अगर मैं float और int गुणा करता हूं, तो क्या उत्तर float है?

+0

बीटीडब्लू, आपको एक <10-लाइन जावा विधि लिखने में सक्षम होना चाहिए जो आपके लिए इसका परीक्षण करता है। –

+4

सहमत हुए, लेकिन मेरे पास इसके लिए त्वरित और गंदे परीक्षण का उपयोग नहीं है क्योंकि जावा के साथ मैंने जो भी काम किया है वह एक्लिप्स में एंड्रॉइड प्रोजेक्ट्स बना रहा है, इसलिए मुझे यह भी पता नहीं होगा कि इसे सरल बनाये जाने के बिना (इसे देखे बिना) जावा में cmd ​​लाइन ऐप। जब मैं काम करना जारी रखता हूं तो यहां पूछने के लिए जल्दी और सचमुच सेकंड में जवाब प्राप्त करें। =) – Rich

+2

लेकिन अब पृथ्वी पर हर किसी को इसका परीक्षण नहीं करना है। –

उत्तर

31

आप एक float के विभाजन से एक int परिणाम को असाइन नहीं कर सकते एक int या इसके विपरीत द्वारा।

तो जवाब हैं:

अगर मैं दो int रों है, लेकिन मैं चल बिन्दु विभाजन करना चाहते हैं ...?

एक कलाकार पर्याप्त है।

अगर मैं एक float और एक int गुणा, जवाब एक float है?

हां यह है।


float f = 1000f; 
int i = 3; 

f = i; // Ok 
i = f; // Error 

f = i/f; //Ok 0.003 
f = f/i; //Ok 333.3333(3) 

i = i/f; //Error 
i = f/i; //Error 
7

पूर्णांक के साथ किसी भी तरह के फ़्लोटिंग-पॉइंट अंकगणित करने के लिए, आपको कम से कम एक ऑपरेटरों को float प्रकार में परिवर्तित करने (पढ़ने: कास्ट) करने की आवश्यकता है।

+4

+1, संक्षेप के लिए – Bozho

10

प्रदर्शित करने के लिए:

int i1 = 5; 
float f = 0.5f; 
int i2 = 2; 
System.out.println(i1 * f); 
System.out.println(i1/i2); 
System.out.println(((float) i1)/i2); 

परिणाम:

2.5 
2 
2.5 
+0

मैंने इसे साफ़ करने के लिए अतिरिक्त ब्रैकेट जोड़े, धन्यवाद – Bozho

7

तो एक द्विआधारी ऑपरेटर के लिए ऑपरेंड के कम से कम एक फ्लोटिंग प्वाइंट प्रकार का है, तो आपरेशन एक फ्लोटिंग प्वाइंट आपरेशन, भले ही अन्य अभिन्न अंग है है ।

(स्रोत: Java language specifications - 4.2.4)

अगर मैं एक नाव और एक पूर्णांक गुणा, जवाब एक नाव है?

System.out.println(((Object)(1f*1)).getClass());//class java.lang.Float 

(आप DrJava का उपयोग करते हैं, तो आप बस टाइप कर सकते हैं ((वस्तु) (1f * 1))। GetClass() बातचीत कक्ष में। वहाँ ग्रहण के लिए DrJava के लिए एक प्लगइन भी है।)

5

सरल उत्तर यह है कि जावा स्वचालित रूप से रूपांतरणों को चौड़ा कर देगा लेकिन रूपांतरण को सीमित नहीं करेगा। तो उदाहरण के लिए int-> फ्लोट स्वचालित है लेकिन फ्लोट-> int को एक कास्ट की आवश्यकता होती है।

0

जावा int < long < float < double क्रम में आदिम प्रकारों को रैंक करता है।यदि एक ऑपरेटर को विभिन्न आदिम प्रकारों के साथ प्रयोग किया जाता है, तो उपरोक्त सूची में दूसरे के सामने दिखाई देने वाला प्रकार किसी भी कंपाइलर डायग्नोस्टिक के बिना दूसरे रूप में परिवर्तित हो जाएगा, यहां तक ​​कि उन मामलों में जहां यह परिशुद्धता का नुकसान होगा। उदाहरण के लिए, 16777217-1.0f 16777215.0f (सही मान से कम एक) उत्पन्न करेगा। कई मामलों में, float और int के बीच परिचालन +/- 16777216 के बाहर संचालन को int से double पर कास्टिंग करके प्रदर्शन किया जाना चाहिए, और फिर - यदि आवश्यक हो - परिणाम float पर कास्टिंग करें। मुझे डबल कास्टिंग परेशान करने की आवश्यकता मिलती है, लेकिन जावा में टाइपकास्टिंग नियमों की आवश्यकता होती है कि कोई भी कष्टप्रद डबल कास्ट का उपयोग करे या परिशुद्धता के नुकसान का सामना कर सके।

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