मैं जावा में पूर्णांक को फ्लोट में कैसे बदल सकता हूं?


82

मैं दो पूर्णांकों है xऔर y। मुझे गणना करने की आवश्यकता है x/yऔर इसके परिणामस्वरूप मैं फ्लोट प्राप्त करना चाहूंगा। उदाहरण के लिए 3/2I के परिणाम के रूप में 1.5 होना चाहते हैं। मैंने सोचा था कि सबसे आसान (या केवल) जिस तरह से यह कन्वर्ट करने के लिए है करने के लिए है कि xऔर yनाव प्रकार में। दुर्भाग्य से, मुझे यह करने का एक आसान तरीका नहीं मिला। क्या आप कृपया मेरी मदद कर सकते हैं?


8
फ्लोट परिणाम = ((फ्लोट) x) / y?
म्बोलम्मा

इसे देखें: xahlee.org/java-a-day/casting.html
fasseg


1
@VinAy: मैं इस मामले में सिफारिश नहीं करेंगे । BigDecimalके लिए एक सार्वभौमिक रूप से सही प्रतिस्थापन नहीं है float
मैट बॉल

1
@VinAy: यह पूरी तरह से निर्भर करता है कि उद्देश्य क्या है। यदि वह वित्त कर रहा है, तो आप सही हैं। यदि वह क्षुद्रग्रह प्रक्षेपवक्र कंप्यूटिंग कर रहा है, तो आप नहीं हैं।
user207421

जवाबों:


153

आपको बस एक फ्लोट में कम से कम एक ऑपरेंड डालना होगा :

float z = (float) x / y;

या

float z = x / (float) y;

या (अनावश्यक)

float z = (float) x / (float) y;

क्या यह अधिक कुशल है, की तुलना में: फ्लोट z = (1.0 * x) / y; ? क्या फ्लोट रूपांतरण आंतरिक रूप से गुणा से अधिक कुशल है? Tnx!
MSquare

1
मुझे नहीं पता, लेकिन मुझे लगता है कि यह अप्रासंगिक है 99% या अधिक समय। यह दूर से भी अड़चन नहीं है। यदि आप वास्तव में चिंतित हैं, तो इसे स्वयं मान लें।
मैट बॉल

1
पहले और दूसरे एक निश्चित हाथ उपकरणों पर त्रुटियों का कारण होगा, सुनिश्चित करें कि आप दोनों पूर्णांक डालते हैं।
ओलिवर डिक्सन

java.lang.Integer को java.lang.Float पर नहीं डाला जा सकता है
asp

2
@ user3002853 ने बॉक्सिंग प्रकारों बनाम प्राइमेट के बारे में पढ़ा। docs.oracle.com/javase/tutorial/java/data/autoboxing.html
मैट बॉल

5

आपको फ्लोट का उपयोग तब तक नहीं करना चाहिए जब तक आपको करना न हो। 99% मामलों में, डबल एक बेहतर विकल्प है।

int x = 1111111111;
int y = 10000;
float f = (float) x / y;
double d = (double) x / y;
System.out.println("f= "+f);
System.out.println("d= "+d);

प्रिंट

f= 111111.12
d= 111111.1111

@ मैट की टिप्पणी के बाद।

फ्लोट में बहुत कम सटीकता (6-7 अंक) होती है और यह महत्वपूर्ण राउंडिंग त्रुटि को काफी आसानी से दिखाता है। डबल में सटीकता का एक और 9 अंक है। फ्लोट के बजाय डबल का उपयोग करने की लागत 99% मामलों में उल्लेखनीय है, लेकिन गोलाई त्रुटि के कारण एक सूक्ष्म बग की लागत बहुत अधिक है। इस कारण से, कई डेवलपर्स फ़्लोटिंग पॉइंट का उपयोग बिल्कुल नहीं करने की सलाह देते हैं और बिगडेसीमल की दृढ़ता से अनुशंसा करते हैं।

हालांकि मुझे पता है कि ज्यादातर मामलों में डबल का उपयोग किया जा सकता है बशर्ते कि समझदार गोलाई का उपयोग किया जाए

इस स्थिति में, इंट x में 32-बिट परिशुद्धता है, जबकि फ्लोट में 24-बिट परिशुद्धता है, यहां तक ​​कि 1 से विभाजित करने पर एक गोल त्रुटि हो सकती है। दूसरी ओर डबल में 53-बिट परिशुद्धता होती है जो यथोचित सटीक परिणाम प्राप्त करने के लिए पर्याप्त से अधिक है।


6
इससे बेहतर क्यों double है, इस पर आपको विस्तार से बताना चाहिए float
मैट बॉल

5

इससे पहले कि आप आगे की गणना में शामिल हो जाएं, आपको पहले मूल्य को फ्लोट में स्थानांतरित करना होगा:

float z = x * 1.0 / y;

4

// पूर्णांक जिसे मैं कनवर्ट करना चाहता हूं

int myInt = 100;

// फ्लोट करने के लिए पूर्णांक की कास्टिंग

float newFloat = (float) myInt

1
एंड्रॉइड स्टूडियो में कम से कम, कंपाइलर असंगत प्रकारों के बारे में शिकायत करेगा जो ऐसा करने की कोशिश कर रहा है।
एडम आर। टर्नर

3

यहाँ आप इसे कैसे कर सकते हैं:

public static void main(String[] args) {
    // TODO Auto-generated method stub
    int x = 3;
    int y = 2;
    Float fX = new Float(x);
    float res = fX.floatValue()/y;
    System.out.println("res = "+res);
}

फिर मिलते हैं !


7
एक आवरण प्रकार ( Float) का उपयोग इसके लिए पूरी तरह अनावश्यक है।
मैट बॉल


1

समीर:

float l = new Float(x/y)

काम नहीं करेगा, क्योंकि यह पहले x और y के पूर्णांक विभाजन की गणना करेगा, फिर उससे एक फ्लोट का निर्माण करेगा।

float result = (float) x / (float) y;

शब्दार्थ सबसे अच्छा उम्मीदवार है।


आपका जवाब एक टिप्पणी होना चाहिए था। समीर को आपके पोस्ट की कोई सूचना नहीं मिलेगी। शब्दार्थ, परिणाम की गणना करने से पहले फ्लोट करने के लिए दोनों ints को परिवर्तित करना अनावश्यक है - इसलिए यह बेहतर नहीं है, केवल एक को ट्रांसफॉर्म करने से। यह एक गलत धारणा देता है, और इसलिए हीन, imho है।
उपयोगकर्ता अज्ञात
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.