जावा में लॉन्ग से डबल में रूपांतरण


93

क्या Longडेटा प्रकार को Doubleया में परिवर्तित करने का कोई तरीका है double?

उदाहरण के लिए, मैं बदलने की आवश्यकता 15552451Lएक करने के लिए doubleडेटा प्रकार।

जवाबों:


136

आप बस कर सकते हैं:

double d = (double)15552451L;

या आप के रूप में लंबी वस्तु से दोगुना हो सकता है:

Long l = new Long(15552451L);
double d = l.doubleValue();

6
वहाँ किसी भी स्ट्रिंग की जरूरत नहीं है: Long.valueOf(15552451L).doubleValue()यदि आप के माध्यम से जाना चाहते हैं Long। ध्यान दें कि यह वही है, आंतरिक रूप से, कास्ट से double, सिवाय इसके कि आप कुछ ऑटो / अनबॉक्सिंग कर रहे हैं।
जो किर्नी

4
मैंने किया। ऐसा करने के लिए एक स्ट्रिंग पार्स करना (अब जवाब से बाहर संपादित किया गया) परिमाण के कई आदेशों द्वारा प्रदर्शन को कम करेगा। बॉक्सिंग कम खर्चीली है लेकिन फिर भी टालने लायक है, खासकर इस तरह के मामलों में (इसका उपयोग करके new) जहां इसे दूर नहीं किया जा सकता है।
जो किरेन

मुझे लगता है कि उदाहरण यह दिखाना था कि आप लॉन्ग -> डबल से प्राप्त कर सकते हैं। लॉन्ग की शुरुआत कैसे हुई, यह महत्वपूर्ण नहीं लगता ..
ams

1
जवाब में उदाहरण दिया गया है और अधिक उचित लगता है अब संपादित किया जा रहा है। मैं मानता हूं कि एक स्ट्रिंग से मूल्य को डबल में बदलना अच्छा अभ्यास नहीं है। मुझे लगता है कि काफी विवादास्पद होना चाहिए।
जो किरेन

1
आपको स्पष्ट रूप से कास्ट करने की आवश्यकता नहीं है। यह सिर्फ काम करता है:double d = 15552451L;
cutemachine

20

सरल कास्टिंग?

double d = (double)15552451L;

और अगर इसका शाब्दिक सिर्फ15552451d
जॉन फ्रीडमैन

2
मुझे भी लगता है कि एक कास्ट आवश्यक नहीं है, आप इस तरह एक लंबे मूल्य के साथ एक डबल बना सकते हैं: "डबल डी = 1234 एल।"
क्रूसम

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

9

जैसा कि पहले ही उल्लेख किया गया है, आप बस लंबे समय तक डबल डाल सकते हैं। लेकिन लंबे समय तक डबल रूपांतरण के साथ सावधान रहें क्योंकि लंबे समय तक डबल जावा में एक संकीर्ण रूपांतरण है।

टाइप डबल से टाइप लॉन्ग में रूपांतरण के लिए 64-बिट फ्लोटिंग-पॉइंट वैल्यू से 64-बिट पूर्णांक प्रतिनिधित्व के लिए एक nontrivial अनुवाद की आवश्यकता होती है। वास्तविक रन-टाइम मान के आधार पर, जानकारी खो सकती है।

उदाहरण के लिए निम्नलिखित कार्यक्रम 1 नहीं 0 मुद्रित करेगा

    long number = 499999999000000001L;
    double converted = (double) number;
    System.out.println( number - (long) converted);

4

क्या आप द्विआधारी रूपांतरण की तलाश कर रहे हैं?

double result = Double.longBitsToDouble(15552451L);

यह आपको शाब्दिक doubleके समान बिट पैटर्न के साथ देगा long

बाइनरी या हेक्साडेसिमल शाब्दिक, यहाँ काम आएंगे। यहाँ कुछ उदाहरण हैं।

double nan = Double.longBitsToDouble(0xfff0000000000001L);
double positiveInfinity = Double.longBitsToDouble(0x7ff0000000000000L);
double positiveInfinity = Double.longBitsToDouble(0xfff0000000000000L);

(देखें Double.longBitsToDouble (लंबा) )

तुम भी longपीछे हट सकते हो

long bits = Double.doubleToRawLongBits(Double.NaN);

( Double.doubleToRawLongBits (डबल) देखें )


यह कुछ और करता है, देखें jdoc ( docs.oracle.com/javase/6/docs/api/java/lang/… )
जिरी

हाँ। लेकिन वह निर्दिष्ट नहीं किया है कि कैसे वह परिवर्तित करने के लिए चाहता है longके लिए double(मुझे लगता है कि कास्टिंग पहली बातें आप जब जावा का उपयोग कर जानने में से एक है) और न ही वह किसी भी सवाल का जवाब स्वीकार किया था। शायद वह मूल्य doubleके समान बिट पैटर्न के साथ प्राप्त करना चाहता है long। खैर, मुझे नहीं पता। तो मैंने सिर्फ जवाब दिया।
पी.वी.बी.

मैंने अतिरिक्त जानकारी जोड़ी है, इसलिए उत्तर अधिक मूल्यवान है।
पी.वी.बी.

3
Long i = 1000000;
String s = i + "";
Double d = Double.parseDouble(s);
Float f = Float.parseFloat(s);

इस तरह हम लॉन्ग टाइप को डबल या फ्लोट या इंट में किसी भी समस्या के बिना कन्वर्ट कर सकते हैं क्योंकि स्ट्रिंग वैल्यू को डबल या फ्लोट या इंट में बदलना आसान है।


2
यह हमेशा बेहतर होता है कि आप उस कोड के स्पष्टीकरण को एक उत्तर के रूप में पोस्ट कर रहे हैं, ताकि यह आगंतुकों को यह समझने में मदद करे कि यह एक अच्छा उत्तर क्यों है।
अबरिसन

1

लंबी तिथि प्रकार से आपका क्या अभिप्राय है ?

आप लंबे समय तक एक डबल कास्ट कर सकते हैं:

double d = (double) 15552451L;

मुझे लगता है कि एक लंबी तारीख कुछ इस तरह होगी "मंगलवार, 19 सितंबर 24893243092333"।
तैमू लीस्टी

1

आप कुछ इस तरह की कोशिश कर सकते हैं:

long x = somevalue;

double y = Double.longBitsToDouble(x);

0

मुझे लगता है कि यह आपके लिए अच्छा है।

BigDecimal.valueOf([LONG_VALUE]).doubleValue()

इस कोड के बारे में कैसे? : डी

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.