C++ nie jest moim językiem, więc wybacz ten prosty problem. Tracę precyzję w konwersji atofa z ciągu na podwójny, czy ktoś może pomóc?C++ Konwersja na podwójną konwersję tracąc precyzję?
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
Grałem z% f w funkcji memset jednak daje 131663.510000
Z góry dzięki.
Sapatos
Gdybym potrzebował tej dokładnej kwoty, rozważałbym użycie zamiast niej stałego punktu. Po stronie C++, jestem pewien, że istnieją lepsze sposoby na konwersję ciągu znaków na podwójne oprócz atof. sprintf() to kolejny sposób na zrobienie tego również, jeśli uważasz, że problem istnieje. Jako komentarz, ponieważ nie mam tutaj dokładnej odpowiedzi. –
@ Michael: można używać strumieni, choć jest nieporęczny, C++ 0x wprowadza określone instrukcje 'stof' (i całej rodziny) jako część Biblioteki Standardowej. –