सी/सी ++ printf("%e",...)
के साथ कम से कम दो एक्सपोनेंट अंक निर्दिष्ट करता है। केवल 1 मुद्रित करने के लिए, और विजुअल स्टूडियो से निपटने के लिए, डिफ़ॉल्ट रूप से, कम से कम 3 प्रिंट करता है, अतिरिक्त कोड की आवश्यकता होती है।
पर विचार करें IOStreams @Dietmar Kühl
सी ++ कोड अभी भी printf()
शैली स्वरूपों का उपयोग करना चाहता है: कॉल करने से पहले
एक double
का मूल्य समायोजन printf()
भी अक्सर गोलाई मुद्दों, सीमा लघुकरण और जैसे सामान्य कोने मामले विफलताओं में परिणाम log10(0.0)
से निपटना। double
पर केवल log10()
के पास बड़े -0.0
, , INF
, NAN
के साथ बड़े double
पर विचार करें।
इस मामले में, स्ट्रिंग को पोस्ट-प्रोसेस करने के लिए बेहतर है।
double var = 1.23e-9;
// - 1 . x e - EEEEE \0
#define ExpectedSize (1+1+1+1+1+1+ 5 + 1)
char buf[ExpectedSize + 10];
snprintf(buf, sizeof buf, "%.1e", var);
char *e = strchr(buf, 'e'); // lucky 'e' not in "Infinity" nor "NaN"
if (e) {
e++;
int expo = atoi(e);
snprintf(e, sizeof buf - (e - buf), "%1d", expo);
}
printf("'%6s'\n", buf); // '1.2e-9'
नोट: के रूप में इसकी चौड़ाई इतनी "%f"
के रूप में बोझल नहीं है %e
पोस्ट-प्रोसेसिंग के लिए मिलनसार है। sprintf(buf, "%f", DBL_MAX)
char
के 1000s में हो सकता है।
असल में, मानक और जी ++ के अनुसार, इसका परिणाम एक्सपोनेंट भाग के लिए * दो * अंक होना चाहिए। –