2016-03-23 96 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);