C++は私の言葉ではないので、この単純な問題を許してください。文字列から倍精度への変換で精度が失われています。だれでも助けてくれますか?私はmemsetの機能には%fでプレーしたC++精度を失う変換を倍増させる文字列?
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
しかし、これは事前に131663.510000
感謝を与えます。
Sapatos
この金額の金額が必要な場合は、代わりに固定小数点の使用を検討します。 C++側では、atof以外にも文字列をdoubleに変換するより良い方法があると確信しています。問題があると思うなら、sprintf()もそれを実行する別のCの方法です。コメントとして私はあなたのために正確な答えを持っていません。 –
@Michael:ストリームを使用することはできますが、かさばるのですが、C++ 0xは標準ライブラリの一部として特定の 'stof'(およびファミリ全体)命令を導入しています。 –