C++ benim dilim değil, bu basit sorunu affedin. Bir dizgeden dize çift dönüşümünde hassaslık kaybediyorum, herkes yardımcı olabilir mi? Ben memset fonksiyonunda% f ile oynadımC++ Çift atof dönüşümü hassasiyeti kaybediyor mu?
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
ancak bu önceden 131663,510000
Teşekkür verir.
Sapatos
Bu miktarın tam olarak buna ihtiyacım olsaydı, bunun yerine sabit nokta kullanmayı düşünürdüm. C++ tarafında, atof'un yanı sıra dize dönüştürmek için daha iyi yollar olduğundan eminim. sprintf(), sorunun var olduğunu düşünüyorsanız, bunu yapmanın başka bir C yoludur. Benim için tam bir cevabım olmadığı için bir yorum olarak. –
@Michael: Akışlar olsa da, hantal, C++ 0x, Standart Kitaplığın bir parçası olarak belirli "stof" (ve tüm aile) yönergelerini tanıtır. –