2016-08-08 7 views
8

यहाँ कोड सीधे आगे है, लेकिन मैं परिणाम समझ में नहीं आता:फ़्लोट गुणन के कास्टिंग परिणाम अलग-अलग परिणाम उत्पन्न करते हैं यदि फ्लोट को पहले एक चर के लिए सहेजा जाता है?

float percent = 0.69f; 
int firstInt = (int)(percent*100f); 

float tempFloat = percent*100f; 
int secondInt = (int)tempFloat; 

Debug.Log(firstInt + " " + secondInt); 

क्यों firstInt 68 लेकिन secondInt 69 है?

+0

एक अच्छा सवाल –

+0

https://dotnetfiddle.net/YMJExy - परिणाम '69 69' है .. – Blorgbeard

+0

स्थानीय मशीन, मुझे' 68 69' परिणाम मिलता है। – jdphenix

उत्तर

1

ऐसा लगता है कि संकलक डबल गणित का उपयोग कर

percent*100f 

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

चूंकि .69 में फ्लोट या डबल में सटीक प्रतिनिधित्व नहीं है, तो दो प्रस्तुतियां एक int के विभिन्न किनारों पर "भूमि" है: डबल थोड़ा ऊपर है, जबकि फ्लोट .69 के वास्तविक मूल्य से थोड़ा नीचे है।

+0

यह एक संभावित सही उत्तर प्रतीत होता है, मुझे लगता है कि संकलक 'फ्लोट' गणना के लिए उचित अनुकूलन सोचता है हालांकि इसे 'डबल' के रूप में करना है। जब यह आउटपुट को स्पष्ट रूप से बदल रहा है और आउटपुट में मूल्य को प्लोन करने के बाद से कोई हार्डवेयर (रनटाइम) विचार नहीं किया जा सकता है। क्या आप जानते हैं कि यह क्यों करता है? – starlight54

+0

आह कोई चिंता नहीं, मेरे प्रश्न का उत्तर टिप्पणियों के अन्य उत्तरों में है, सी # कंपाइलर विकल्प को दिए जाने पर अधिक सटीकता का अधिक उपयोग कर सकता है, जैसा कि आप कहते हैं, इसे 'फ्लोट' के रूप में संग्रहीत करना इसे रोकता है वह कर रहा। – starlight54

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