2016-03-23 142 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)不允許你控制精度(和你的輸出是一種精密的問題)。

要控制精度,您應該使用snprintfstd::ostringstream首先準備字符串,並用MessageBox顯示它。

+0

哦,太感謝你了! – rel1x

+0

如果您的操作數是TCHAR,那麼您可能需要'_sntprintf_s',以便您的代碼可以編譯爲ANSI或寬模式。 't'代表'TCHAR'。 '_s'後綴表示「安全」,這意味着該函數將緩衝區的大小作爲參數來卸載調用者的一些溢出檢查。 (它並不完全安全,但更安全。)使流解決方案具有足夠的靈活性來處理'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);