std::money_put<CharT,OutputIt>:: put, do_put
|
Défini dans l'en-tête
<locale>
|
||
|
public
:
iter_type put
(
iter_type out,
bool
intl,
std::
ios_base
&
f,
|
(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,
|
(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.
do_put
de la classe la plus dérivée.
É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ù
noneouspaceapparaî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) |