2011-01-24 9 views
5

सी ++ मेरी भाषा नहीं है इसलिए इस साधारण समस्या को क्षमा करें। मैं स्ट्रिंग से डबल तक एक रूपांतरण में सटीकता खो रहा हूं, क्या कोई मदद कर सकता है?सी ++ स्ट्रिंग को सटीक खोने वाले रूपांतरण को दोगुना करने के लिए?

string lAmount; 

string lSuspendedInt = "131663.51"; 
string lAccruedInterest = "0.0"; 
double dSuspendedInt= atof(lSuspendedInt.c_str()); //PROBLEM HERE? 
double dAccruedInterest = atof(lAccruedInterest.c_str()); 
double dTotal = dSuspendedInt + dAccruedInterest; 

char cAmount[50]; 

memset(cAmount,0X00,sizeof(cAmount)); 
    sprintf(cAmount,"%g*",dTotal); 
    lAmount = cAmount; 


cout << "lAmount: "<<lAmount<<endl; //PRINTING: 131664 not 131663.51 

मैं memset समारोह में% च के साथ खेला है लेकिन इस देता है 131663,510000

अग्रिम धन्यवाद।

Sapatos

+0

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

+1

@ माइकल: कोई स्ट्रीम का उपयोग कर सकता है, हालांकि यह भारी है, सी ++ 0x मानक लाइब्रेरी के हिस्से के रूप में विशिष्ट 'स्टॉफ' (और पूरे परिवार) निर्देश प्रस्तुत करता है। –

उत्तर

3

समस्या आपकी %g प्रारूप ऑपरेटर है, जो पर्याप्त परिशुद्धता के साथ निर्दिष्ट नहीं है। आप इसके बजाय %.2f चाहते हैं, जो दशमलव बिंदु के बाद दो अंक मुद्रित करता है।

+0

thansk जो काम करता है – sapatos

2

sprintf छह महत्वपूर्ण अंक मुद्रण करने के लिए %g फॉर्मेट स्पेसिफायर चूक। आप और अधिक चाहते हैं, तो आप स्पष्ट रूप से निर्दिष्ट कर सकते हैं कि कितने मुद्रित किया जाना चाहिए:

sprintf(cAmount,"%.8g*",dTotal); 
1

समारोह atof एक डबल पैदा करता है। here देखें। आपकी समस्या यह है कि %g या तो फ्लोट या वैज्ञानिक नोटेशन का छोटा हिस्सा देता है। here देखें। यह भी ध्यान रखें, कि आप * नोटेशन में जोड़ रहे हैं जो दर्शाता है कि मुद्रित वर्णों की संख्या में अपेक्षित छंटनी है।

+0

* एक टाइपो था :( – sapatos

+0

'*' नोटेशन रूपांतरण विनिर्देशक से पहले किसी भी प्रभाव को प्रभावित करने की आवश्यकता होगी ... जैसा कि यह सिर्फ एक सामान्य चरित्र के रूप में मुद्रित है। –

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