2010-11-24 52 views
0

Je cherche une méthode simple pour mettre en forme le float suivant \ nombres doubles à un CString.
J'espérais utiliser CString.Format(), mais les alternatives sont également les bienvenues, à condition qu'elles finissent par être un CString.Format float nombres doubles à CString avec remplissage zéro et nombre de chiffres préréglé

3.45 
112.2 

le format suivant:

00003450 
00112200 

Notez qu'il devrait être pas de point décimal.
Cela peut-il être fait simplement, si oui, comment?

Répondre

1
CString myString; 
myString.Format(_T("%08d"), static_cast<int>(num * 1000.0 + 0.5)); 

variante:

//... 
#include <sstream> 
#include <iomanip> 

using namespace std; 

//... 
ostringstream s; 
s << setfill('0') << setw(8) << static_cast<int>(num * 1000.0 + 0.5); 

CString myString(s.str().c_str()); 
//... 

Références:

  1. CString::Format
  2. printf
+0

Comment puis-je convertir en CString à la fin? (sans imprimer ...) – Jonathan

+0

Je pense que ça devrait être s.str(). c_str() et non c.str.c_str() – Jonathan

+0

@Jonathan - merci. Fixé. – sje397

2

f fonctionne.

void f(double a) { 
    const int a1000 = static_cast<int>(a * 1000 + 0.5); 
    assert(a1000 < 100000000); 
    const int b = a1000 + 100000000; 
    std::stringstream ss; 
    ss << b; 
    std::cout << ss.str().c_str() + 1; //remove first 1; 
} 

int main() { 
    f(3.45); 
    f(112.2); 
} 
+0

Comment puis-je convertir à CString à la fin? (sans impression ...) – Jonathan

3
#include <iomanip> 
#include <iostream> 

std::cout << std::setw(8) << std::setfill('0') << int(int(YourNumber)*1000+.5); 

devrait faire l'affaire.

Modifier: Arrondi ajouté. Edit: Second int() cast pour réduire au silence les avertissements obscurs :-)

+0

Comment puis-je convertir en CString à la fin? (sans impression ...) – Jonathan

+0

vous obtiendrez un avertissement sur de nombreux compilateurs en multipliant un 'int' par un' double' –

+0

Je multiplie un int avec un int (1000) et en ajoutant un double. Quoi qu'il en soit, réparé. @ Jonathan, désolé, je lis vite. – hirschhornsalz

1

Voici une solution en utilisant Boost.Format:

#include <boost/format.hpp> 

CString f(double d) 
{ 
    return str(boost::format("%1$=08.0f") % (1000*d)).c_str(); 
}