2013-06-29 10 views
8

मेरे पास सभी के लिए सवाल है।int a = (int) ((0.7 + 0.1) * 10)। क्यों एक = 7?

int a = (int) ((0.7 + 0.1) * 10) 

इस कोड के क्रियान्वित करने के बाद, एक = 7. मुझे समझ में नहीं कर सकते क्यों, क्योंकि (0.7 + 0.1) = 0.8 और 0.8 * 10 = 8। क्या कोई मुझे बता सकता है क्यों? धन्यवाद!

+7

'0.7 + 0.1' के परिणाम छपाई का प्रयास करें, और आपके पास आपका जवाब होगा। – Vulcan

+0

परिणाम 0 है। मैं वही समझता हूं कि क्यों एक = 7 –

+0

@ user2535193 आप इसे कैसे प्रिंट कर रहे हैं? प्रिंटिंग के लिए जिम्मेदार कोड पोस्ट करें। – Maroun

उत्तर

24

मुद्दा यह है कि न तो 0.1 है और न ही 0.7 double के रूप में ठीक वैसे ही प्रदर्शित किया जा सकता है:

  • 0.1 के रूप में लगभग 0.10000000000000000555 का प्रतिनिधित्व किया जाता है।

  • 0.7 लगभग 0.69999999999999995559 के रूप में प्रतिनिधित्व किया जाता है।

उनका योग लगभग 0.79999999999999993339 है। दस और छिड़काव से गुणा, यह 7 देता है।

What Every Computer Scientist Should Know About Floating-Point Arithmetic विषय पर एक उत्कृष्ट पढ़ा गया है।

5

यह अंकगणित फ्लोट है, यह फर्श हो जाता है।

यहाँ क्या हो रहा है कि (0.1 + 0.7) वास्तव में 0.8 के करीब है, लेकिन यह वास्तव में 0.8 नहीं है, जब तुम ..., 10 आप 7.9999 पाने से गुणा करें जब आप मंजिल, आप 7 मिलता है

3

जावा में int एस का दशमलव भाग छोटा कर दिया गया है। आप या तो x और y फ़्लोटिंग पॉइंट वेरिएबल्स बना सकते हैं या बस उन्हें फ़्लोट करने के लिए कास्ट कर सकते हैं और अंतिम परिणाम के रूप में int प्राप्त करने के लिए उन्हें वापस निकाल सकते हैं।

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