2016-03-23 21 views
1

私のオペランドは両方ともTCHARタイプで、私はオペランドが整数または倍数になる可能性があるので、doubleに変換します。私がするとき1.5 + 1私は2.500000を持っている。しかし、私は2.5がほしいです。私はprintfを使って問題を解決する方法を知っていますが、私の結果MessageBoxを使う必要があります。どうすれば解決できますか?浮動小数点数の書式

double result = _wtof(firstOperand) + _wtof(secondOperand); 
wstring ans = to_wstring(result); 
MessageBox(NULL, ans.c_str(), L"Result", MB_OK); 

答えて

2

to_string(およびto_wstring)は、精度を制御することはできません(とあなたの出力は精度の問題です)。

精度を制御するには、まずsnprintfまたはstd::ostringstreamのいずれかを使用して文字列を準備し、MessageBoxと表示する必要があります。

+0

ああ、ありがとうございました! – rel1x

+0

オペランドがTCHARの場合は、おそらく '_sntprintf_s'が必要なので、コードをANSIモードまたはワイドモード用にコンパイルすることができます。 't'は' TCHAR'です。 '_s'接尾辞は" safe "を表します。これは、呼び出し元からのオーバーフローチェックの一部をオフロードするために、関数がバッファのサイズをパラメータとして使用することを意味します。 (これは完全には安全ではありませんが、より安全です)ストリームソリューションを「TCHAR」を処理するのに十分柔軟にすることは可能ですが、難しくなります。 –

0
std::wostringstream ToMsgBox; 
ToMsgBox << result; 
std::wstring ans = ToMsgBox.str(); 

またはクイックと汚い:

std::wstring ans = to_wstring(result); 
ans.resize(test.find_first_of('.') + 2); 
関連する問題