Mam do czynienia z problemem konwersji, dla którego chciałbym twojej pomocy. Używam kompilatora gcc4 i jestem całkowicie ograniczony do korzystania z gcc4.Podnieś ciąg tekstowy do podwożenia
Chcę przekonwertować std :: string na podwójne.
std::string aQuantity = aRate.getQuantity();
std::string aAmount = aRate.getAmount();
// aAmount = "22.05"
double dQuantity = boost::lexical_cast<double>(aQuantity);
double dAmount = boost::lexical_cast<double> (aAmount);
// dAmount = 22.050000000000001
Nawiasem mówiąc, ja też próbowałem atof
i nadal mam ten sam problem. Czy istnieje sposób użycia istringstream
z setprecission(2)
, aby uzyskać poprawną wartość pokazywaną przez aAmount
?
Trzeba tylko wydrukować go z mniejszą precyzją. Zawsze ma dokładnie taką samą dokładność. – chris
Funkcja 'boost :: lexical_cast' używa wewnętrznie' std :: istringstream' do parsowania/wyodrębniania wartości. –
Jeśli wykonać następujące czynności, otrzymuję 22 zamiast ... 'std :: stringstream precisionValue; precisionValue.precision (2); precisionValue << boost :: lexical_cast (aAmount) << std :: endl; double dAmount; precisionValue >> dAmount; // Teraz mam 22'' –
Nostradamus