Namespaces
Variants

std::money_put<CharT,OutputIt>:: put, do_put

From cppreference.net
std::money_put
Member functions
money_put::put money_put::do_put
Défini dans l'en-tête <locale>
public :

iter_type put ( iter_type out, bool intl, std:: ios_base & f,

char_type fill, long double quant ) const ;
(1)
iter_type put ( iter_type out, bool intl, std:: ios_base & f,
char_type fill, const string_type & quant ) const ;
(2)
protected :

virtual iter_type do_put ( iter_type out, bool intl, std:: ios_base & str,

char_type fill, long double units ) const ;
(3)
virtual iter_type do_put ( iter_type out, bool intl, std:: ios_base & str,
char_type fill, const string_type & digits ) const ;
(4)

Formate une valeur monétaire et écrit le résultat dans le flux de sortie.

1,2) Fonctions membres publiques, appellent la fonction membre do_put de la classe la plus dérivée.
3) Les arguments numériques units sont convertis en une chaîne de caractères larges comme par ct. widen ( buf1, buf1 + std:: sprintf ( buf1, "%.0Lf" , units ) , buf2 ) , où ct est la facette std::ctype imprégnée dans str. getloc ( ) et buf1 et buf2 sont des tampons de caractères suffisamment grands. La chaîne de caractères résultante buf2 est traitée, formatée et envoyée vers out comme décrit ci-dessous.
4) À partir de l'argument chaîne digits , seul le signe moins optionnel en tête (déterminé en comparant avec ct. widen ( '-' ) , où ct est la facette std::ctype imprégnée dans str. getloc ( ) ) et les caractères numériques immédiatement suivants (classifiés par ct ) sont pris comme séquence de caractères à traiter, formater et sortir vers out comme décrit ci-dessous.

Étant donné la séquence de caractères des étapes précédentes, si le premier caractère est égal à ct. widen ( '-' ) , appelle mp. neg_format ( ) pour obtenir le motif de formatage, sinon appelle mp. pos_format ( ) , où mp est la facette std:: moneypunct < CharT, intl > imbriquée dans str. getloc ( ) .

Les caractères de séparation des milliers et de point décimal sont insérés selon les exigences de mp. grouping ( ) , mp. frac_digits ( ) , mp. decimal_point ( ) , et mp. thousands_sep ( ) , et la chaîne résultante est placée dans la séquence de sortie où value apparaît dans le modèle de formatage.

Si str. flags ( ) & str. showbase est non nul (le manipulateur std::showbase a été utilisé), alors le symbole ou la chaîne monétaire est généré en appelant mp. curr_symbol ( ) et placé dans la séquence de sortie où symbol apparaît dans le motif de formatage.

Si mp. positive_sign ( ) (dans le cas où le motif de format positif est utilisé) ou mp. negative_sign ( ) (dans le cas où le motif de format négatif est utilisé) renvoie une chaîne contenant plus d'un caractère, le premier caractère renvoyé est placé dans la séquence de sortie là où sign apparaît dans le motif de formatage, et les caractères restants sont placés après tous les autres caractères. Par exemple, le motif de formatage { sign, value, space, symbol } avec des unités de 123 et un negative_sign de "-" pourrait donner "-1.23 €" , tandis qu'un negative_sign de "()" générerait "(1.23 €)" .

Si le nombre de caractères générés pour le format spécifié est inférieur à la valeur retournée par str. width ( ) , alors des copies de fill sont insérées pour porter la longueur totale de la séquence de sortie à exactement str. width ( ) , comme suit :

  • Si str. flags ( ) & str. adjustfield est égal à str. internal , les caractères de remplissage sont insérés là où none ou space apparaît dans le motif de formatage.
  • Sinon, si str. flags ( ) & str. adjustfield est égal à str. left , les copies de fill sont ajoutées après tous les autres caractères.
  • Sinon, les caractères de remplissage sont placés avant tous les autres caractères.

En fin de compte, appelle str. width ( 0 ) pour annuler les effets de tout std::setw .

Table des matières

Valeur de retour

Un itérateur pointant immédiatement après le dernier caractère produit.

Notes

Les unités monétaires sont supposées être les plus petites unités non fractionnaires de la devise : les cents aux États-Unis, le yen au Japon.

Exemple

#include <iomanip>
#include <iostream>
#include <locale>
struct my_punct : std::moneypunct_byname<char, false>
{
    my_punct(const char* name) : moneypunct_byname(name) {}
    string_type do_negative_sign() const { return "()"; }
};
int main()
{
    std::locale loc("ru_RU.utf8");
    std::cout.imbue(loc);
    long double units = -123.45;
    std::cout << "In Russian locale, " << units << " prints as " << std::showbase;
    // note, the following is equivalent to simply std::put_money(units)
    std::use_facet<std::money_put<char>>(loc).put(
        {std::cout}, false, std::cout, std::cout.fill(), units);
    std::cout << '\n';
    std::cout.imbue(std::locale(std::cout.getloc(), new my_punct("ru_RU.utf8")));
    std::cout << "With negative_sign set to \"()\", it prints as ";
    std::use_facet<std::money_put<char>>(loc).put(
        {std::cout}, false, std::cout, std::cout.fill(), units);
    std::cout << '\n';
}

Sortie :

In Russian locale, -123,45 prints as -1.23 руб
With negative_sign set to "()", it prints as (1.23 руб)

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 328 C++98 la chaîne de format utilisée pour std::sprintf était "%.01f" corrigée en "%.0Lf"

Voir aussi

définit les paramètres de formatage monétaire utilisés par std::money_get et std::money_put
(modèle de classe)
analyse et construit une valeur monétaire à partir d'une séquence de caractères d'entrée
(modèle de classe)
(C++11)
formate et affiche une valeur monétaire
(modèle de fonction)