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
Definiert in Header <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)

Formatiert einen Geldbetrag und schreibt das Ergebnis in den Ausgabestream.

1,2) Öffentliche Memberfunktionen, rufen die Memberfunktion do_put der am stärksten abgeleiteten Klasse auf.
3) Die numerischen Argumente units werden in eine Breitzeichen-Zeichenkette konvertiert, als ob durch ct. widen ( buf1, buf1 + std:: sprintf ( buf1, "%.0Lf" , units ) , buf2 ) , wobei ct die std::ctype -Facette ist, die in str. getloc ( ) eingebettet ist, und buf1 und buf2 ausreichend große Zeichenpuffer sind. Die resultierende Zeichenkette buf2 wird wie unten beschrieben verarbeitet, formatiert und an out ausgegeben.
4) Von dem Zeichenkettenargument digits werden nur das optionale führende Minuszeichen (bestimmt durch Vergleich mit ct. widen ( '-' ) , wobei ct der in str. getloc ( ) eingebundene std::ctype -Facette ist) und die unmittelbar folgenden Ziffernzeichen (klassifiziert durch ct ) als zu verarbeitende Zeichenfolge übernommen, formatiert und wie unten beschrieben an out ausgegeben.

Gegeben die Zeichensequenz aus den vorherigen Schritten, wenn das erste Zeichen gleich ct. widen ( '-' ) ist, ruft mp. neg_format ( ) auf, um das Formatierungs- pattern zu erhalten, andernfalls wird mp. pos_format ( ) aufgerufen, wobei mp das std:: moneypunct < CharT, intl > Facet ist, das in str. getloc ( ) imbued ist.

Tausendertrennzeichen und Dezimaltrennzeichen werden entsprechend den Anforderungen von mp. grouping ( ) , mp. frac_digits ( ) , mp. decimal_point ( ) und mp. thousands_sep ( ) eingefügt, und die resultierende Zeichenkette wird in die Ausgabesequenz platziert, wo value im Formatierungsmuster erscheint.

Wenn str. flags ( ) & str. showbase ungleich Null ist (der std::showbase Manipulator wurde verwendet), dann wird das Währungssymbol oder die Zeichenkette durch Aufruf von mp. curr_symbol ( ) erzeugt und in der Ausgabesequenz an der Stelle platziert, an der symbol im Formatierungsmuster erscheint.

Wenn mp. positive_sign ( ) (bei Verwendung eines positiven Formatmusters) oder mp. negative_sign ( ) (bei Verwendung eines negativen Formatmusters) eine Zeichenkette mit mehr als einem Zeichen zurückgibt, wird das erste zurückgegebene Zeichen an der Position in der Ausgabesequenz platziert, an der sign im Formatierungsmuster erscheint, und die restlichen Zeichen werden nach allen anderen Zeichen platziert. Beispielsweise könnte das Formatierungsmuster { sign, value, space, symbol } mit dem Betrag 123 und einem negative_sign von "-" zu "-1.23 €" führen, während ein negative_sign von "()" zu "(1.23 €)" führen würde.

Wenn die Anzahl der für das angegebene Format generierten Zeichen kleiner ist als der von str. width ( ) zurückgegebene Wert, dann werden Kopien von fill eingefügt, um die Gesamtlänge der Ausgabesequenz genau auf str. width ( ) zu bringen, wie folgt:

  • Wenn str. flags ( ) & str. adjustfield gleich str. internal ist, werden die Füllzeichen an der Stelle eingefügt, wo none oder space im Formatierungsmuster erscheint.
  • Andernfalls, wenn str. flags ( ) & str. adjustfield gleich str. left ist, werden die Kopien von fill nach allen anderen Zeichen angehängt.
  • Andernfalls werden die Füllzeichen vor allen anderen Zeichen platziert.

Abschließend ruft es str. width ( 0 ) auf, um die Effekte von std::setw aufzuheben.

Inhaltsverzeichnis

Rückgabewert

Ein Iterator, der unmittelbar auf das letzte erzeugte Zeichen zeigt.

Hinweise

Die Währungseinheiten werden als die kleinsten nicht-bruchzahligen Einheiten der Währung angenommen: Cent in den USA, Yen in Japan.

Beispiel

#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';
}

Ausgabe:

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

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 328 C++98 das Formatstring für std::sprintf war "%.01f" korrigiert zu "%.0Lf"

Siehe auch

definiert monetäre Formatierungsparameter, die von std::money_get und std::money_put verwendet werden
(Klassentemplate)
analysiert und konstruiert einen monetären Wert aus einer Eingabezeichenfolge
(Klassentemplate)
(C++11)
formatiert und gibt einen monetären Wert aus
(Funktionstemplate)