2009-04-24 11 views
101

एक और ब्रूस एक्सल्स में वेग की गणना करने में व्यायाम, v = s/t जहां एस और टी पूर्णांक हैं। मैं इसे कैसे बना सकता हूं ताकि विभाजन एक फ्लोट से बाहर हो जाए?2 चींटियों का विभाजन कैसे एक और int के बजाय एक फ्लोट का उत्पादन करने के लिए?

class CalcV { 
    float v; 
    float calcV(int s, int t) { 
    v = s/t; 
    return v; 
    } //end calcV 
} 

public class PassObject { 

    public static void main (String[] args) { 
    int distance; 
    distance = 4; 

    int t; 
    t = 3; 

    float outV; 

    CalcV v = new CalcV(); 
    outV = v.calcV(distance, t); 

    System.out.println("velocity : " + outV); 
    } //end main 
}//end class 

उत्तर

219

बस दो ऑपरेटरों में से एक को पहले एक फ्लोट में डालें।

v = (float)s/t; 

कास्ट विभाजन से अधिक प्राथमिकता है, इसलिए विभाजन से पहले होता है।

अन्य ऑपरेंड प्रभावी रूप से संकलक द्वारा एक फ्लोट पर स्वचालित रूप से डाला जाएगा क्योंकि नियम कहते हैं कि यदि या तो ऑपरेंड फ्लोटिंग पॉइंट प्रकार का है तो ऑपरेशन एक फ्लोटिंग पॉइंट ऑपरेशन होगा, भले ही अन्य ऑपरेंड अभिन्न है। Java Language Specification, §4.2.4 और §15.17

+7

गरर, इस बारे में मुझे 30 मिनट लग गए जब तक मैं इस पाया और लगा यह बाहर। बहुत आसन। : डी – Rihards

+0

अधिक विशेष रूप से, इस विशेष नियम का उल्लेख यहां दिया गया है: [गुणक ऑपरेटर] (http://java.sun.com/docs/books/jls/third%5Fedition/html/expressions.html#239829), तो इसे चलो भविष्य के संदर्भ के लिए यहां खड़े हो जाओ। – quantum

+5

(बाद में इस प्रश्न में आने वाले किसी भी व्यक्ति के लिए, दिए गए लिंक टूटे हुए हैं। नए हैं: http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2 .4 और http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.17) –

2

आप अंश या भाजक फ्लोट करने के लिए डाली कर सकते हैं ...

पूर्णांक संचालन आम तौर पर तो आप operanding से किसी एक नंबर बदलने के लिए पूर्णांक लौटने के लिए,।

+1

आमतौर पर? अगर वे बिल्कुल वापस आते हैं, तो वे int वापस करने जा रहे हैं। –

9

प्रयास करें:

v = (float)s/(float)t; 

तैरता को ints कास्टिंग फ्लोटिंग प्वाइंट-विभाजन होने के लिए अनुमति देगा।

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

+0

मुझे नहीं पता, यह कहने जैसा है कि आपको इसके बजाय लंबे समय तक उपयोग करना चाहिए। –

3

कास्ट पूर्णांक में से एक एक नाव के लिए चल बिन्दु गणित के साथ किया जा करने के लिए। अन्यथा पूर्णांक गणित हमेशा पसंद किया जाता है। तो:

v = (float)s/t; 
3

आप कास्ट कर सकते हैं यहां तक ​​कि बस उनमें से एक है, लेकिन स्थिरता के लिए आप स्पष्ट रूप से कास्ट करने के लिए दोनों बहुत वी = (नाव) की तरह कुछ/s (नाव) टी काम करना चाहिए कर सकते हैं।

4

कोड readabilty पर प्रभाव को कम करने के लिए, मेरा सुझाव चाहते हैं:

v = 1d* s/t; 
0

कास्ट पूर्णांक में से एक/पूर्णांक के दोनों आपरेशन के लिए मजबूर करने फ्लोट करने के लिए चल बिन्दु गणित के साथ किया जा करने के लिए। अन्यथा पूर्णांक गणित हमेशा पसंद किया जाता है। तो:

1. v = (float)s/t; 
2. v = (float)s/(float)t; 
0

JLS स्टैंडर्ड

JLS 7 15.17.2. Division Operator / का कहना है:

पूर्णांक विभाजन की ओर 0.

यही कारण है कि 1/2 एक नाव नहीं देता दौर।

परिवर्तित बस या तो एक क्योंकि 15.17. Multiplicative Operators कहते (float)1/2 में के रूप में पर्याप्त होता फ्लोट करने के लिए:

बाइनरी संख्यात्मक पदोन्नति ऑपरेंड

और 5.6.2. Binary Numeric Promotion पर किया जाता है का कहना है:

  • यदि ऑपरेंड डबल प्रकार का है, तो दूसरा दूसरा है डबल करने के लिए दबाया।
  • अन्यथा, यदि या तो संकार्य प्रकार नाव की है, अन्य फ्लोट करने के लिए
0

इस प्रयास करें बदल जाती है:

class CalcV 
{ 
     float v; 
     float calcV(int s, int t) 
     { 
      float value1=s; 
      float value2=t; 
      v = value1/value2; 
      return v; 
     } //end calcV 
} 
संबंधित मुद्दे