Disons que vous avez quelque chose comme:comment tronquer la largeur des types entiers avec std :: ostringstream?
std::ostringstream oss;
int value(42);
oss.fill('0');
oss << std::setw(3) << value;
cout << oss.str();
SORTIE: 042
Cette sortie est parce que std :: setw assure une largeur minimale et nous a dit au cours d'eau pour remplir avec 0 mais comment voulez-vous faire le contraire et spécifier une largeur maximale de sorte que l'affichage sera tronquée en LIST et natif C++ de préférence ...
Actuellement j'ai quelque chose que je considère comme une bidouille horrible et inefficace:
std::ostringstream oss;
int value(1239999);
oss.fill('0');
oss << std::setw(3) << boost::lexical_cast<std::string, int>(value).substr(0, 3);
cout << oss.str();
SORTIE: 123
Je l'ai regardé boost :: format mais c'est la même histoire là aussi loin que je peux dire qu'il n'y a aucun moyen de le faire « joli » ... des suggestions? MISE À JOUR: Les flux std :: ostringstream et STL en général sont connus pour fonctionner lentement par rapport aux autres conteneurs et objets de modèle STL. Peut-être que je ferais mieux de créer un objet de file d'attente de messages qui enveloppe et utilise en interne une std :: queue, puis utilise simplement sprintf_s à des fins de formatage?
Comment diable peut-il être correct que '" 123 "' est une représentation correcte de '123' et' 1239999'? Si c'est vrai, je ne pense pas que vous ayez vraiment des entiers. – SingleNegationElimination
Ceci est une simple représentation hors contexte pour clarifier le problème ... en utilisation réelle la valeur représente les secondes fractionnaires d'un objet temps posix enregistré dans le cadre d'un horodatage pour l'entrée qui est inexact après 3 chiffres sur la plupart des systèmes d'exploitation , gaspille de l'espace et rend le journal plus difficile à lire. – AJG85