2016-03-23 16 views
1

Beide meiner Operanden in TCHAR Typ und ich konvertieren sie in double, weil meine Operanden Ganzzahlen oder doppelt sein können. Wenn ich 1.5 + 1 mache, habe ich 2.500000. Aber ich will 2.5. Ich weiß, wie man ein Problem mit printf löst, aber ich muss mein Ergebnis MessageBox verwenden. Wie kann ich es lösen?Format Dezimal in float

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

Antwort

2

to_string (und to_wstring) nicht erlauben Sie Genauigkeit zu steuern (und Ihr Ausgang ist ein Präzisionsproblem).

Um Genauigkeit zu steuern, sollten Sie entweder snprintf oder std::ostringstream verwenden, um zuerst die Zeichenfolge vorbereiten, und es als Anzeige mit MessageBox.

+0

Oh, thank you so much! – rel1x

+0

Wenn Ihre Operanden TCHAR sind, dann möchten Sie wahrscheinlich '_sntprintf_s', damit Ihr Code für ANSI- oder Wide-Modus kompilieren kann. Das "t" ist für "TCHAR". Das Suffix '_s steht für" safe ", was bedeutet, dass die Funktion die Größe des Puffers als Parameter annimmt, um einen Teil der Überlaufprüfung vom Aufrufer zu entfernen. (Es ist nicht vollkommen sicher, aber es ist sicherer.) Es ist möglich, aber schwieriger, die Stream-Lösung flexibel genug zu machen, um 'TCHAR's zu handhaben. –

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

Oder quick and dirty:

std::wstring ans = to_wstring(result); 
ans.resize(test.find_first_of('.') + 2); 
Verwandte Themen