कुछ सी # कोड में मैं इस तरह कथन देखा है:हमें सी # में अक्षर का उपयोग क्यों करना चाहिए?
float someFloat = 57f;
मुझे पता है कि क्यों हम उपरोक्त मामले में f
तरह शाब्दिक का उपयोग करना चाहिए चाहते हैं ?.
कुछ सी # कोड में मैं इस तरह कथन देखा है:हमें सी # में अक्षर का उपयोग क्यों करना चाहिए?
float someFloat = 57f;
मुझे पता है कि क्यों हम उपरोक्त मामले में f
तरह शाब्दिक का उपयोग करना चाहिए चाहते हैं ?.
"f" ऊपर एक प्रकार प्रत्यय है: केवल समय यह आसानी से अलग है अतिरिक्त परिशुद्धता के साथ decimal
रों के साथ है। यह संकलक को प्रदान किए गए शाब्दिक प्रकार के सटीक प्रकार को बताता है। इसका उपयोग किया जाता है ताकि संकलक शाब्दिक के लिए उचित मात्रा में भंडारण (परिशुद्धता) आवंटित कर सके। डिफ़ॉल्ट रूप से, फ़्लोटिंग पॉइंट अक्षर को "डबल" के लिए भंडारण दिया जाता है। यदि आप प्रत्यय के रूप में "एफ" जोड़ते हैं, तो शाब्दिक केवल एक फ्लोट के लिए भंडारण प्राप्त करेगा, जिसमें कम सटीकता होगी।
double d = 50.1234; // given double storage
double d = 50.1234f; // given float storage, which might lose precision compared to double
मुख्य रूप से इसलिए संकलक वास्तव में जानता है कि हम क्या मतलब है - विशेष रूप से अधिभार समाधान के लिए:
Foo(57f);
चाहिए कि कॉल Foo(int)
/Foo(float)
/Foo(decimal)
?
वास्तव में, मैं चीजों को याद रखने पसंद नहीं है - एक विकल्प है:
float someFloat = (float)57;
इस नहीं एक क्रम डाली है - यह 57f
के समान है (IL स्तर पर)।
decimal someDecimal = (decimal)57.0; // same as 57M, not 57.0M (scale is different)
डिफ़ॉल्ट रूप से, असाइनमेंट ऑपरेटर के दाईं ओर एक वास्तविक संख्यात्मक शाब्दिक को डबल के रूप में माना जाता है। इसलिए, प्रारंभ करने में एक नाव चर का उपयोग प्रत्यय च या एफ, उदाहरण के लिए:
float x = 3.5F;
आप पिछले घोषणा में प्रत्यय का उपयोग नहीं करते हैं, तो आप एक संकलन त्रुटि क्योंकि आप एक स्टोर करने के लिए प्रयास कर रहे हैं मिल जाएगा एक फ्लोट चर में डबल मान।
से MSDN: float
क्योंकि 57 एक पूर्णांक है और 57.0 एक डबल है। आप एक फ्लोट पाने की कोशिश कर रहे हैं, जो एक सटीक संख्या है। वह सवाल पूछता है, आप एक सटीक फ्लोट का उपयोग क्यों कर रहे हैं?
सी # अक्षर पर कुछ और के लिए http://www.blackwasp.co.uk/CSharpNumericLiterals.aspx देखें।
इस लेख जो सी # में संख्यात्मक Literals बारे में बहुत कुछ बताते हैं चेक आउट: http://www.blackwasp.co.uk/CSharpNumericLiterals.aspx
यहाँ लेख से थोड़ी अंश है:
नाव UNITPRICE = 123.45; // यह
संकलन नहीं होगा समस्या यहाँ है कि आप नहीं हमेशा परोक्ष एक डबल (123.45) एक नाव में बदल सकते हैं।सी # संकलक इस समझता है और संकलित किया जा रहा
मुझे पता है कि क्यों हम उपरोक्त मामले में की तरह शाब्दिक का उपयोग करना चाहिए च चाहते से कोड बंद हो जाता है ?.
आपको नहीं करना चाहिए। खैर, आप पर नहीं हैं।
उपर्युक्त मामला 57 एफ के लिए एक फ्लोट प्रारंभिक दिखाता है। इंटीजर को पूरी तरह से फ्लोट संकलन समय में परिवर्तित कर दिया जाता है ताकि यदि आप परेशान हों तो आप आसानी से उस एफ प्रत्यय को दूर कर सकते हैं। हालांकि, लिखित कोड में स्थिरता के लिए, मैं हमेशा प्रत्यय जोड़ने की कोशिश करता हूं। ध्यान दें कि यह केवल गोलाकार संख्याओं (पूर्णांक) पर लागू होता है।
हमें साहित्य का उपयोग क्यों करना चाहिए?
int/int = int
लेकिनint/float = float
:
int timespanInMS = 500;
Console.WriteLine("Execution time: {0} sec.", timespanInMS/1000);
Console.WriteLine("Execution time: {0} sec.", timespanInMS/1000F);
// Result:
// Execution time: 0 sec.
// Execution time: 0.5 sec.