std::money_put<CharT,OutputIt>:: put, do_put
|
Definiert in Header
<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) | |
Formatiert einen Geldbetrag und schreibt das Ergebnis in den Ausgabestream.
do_put
der am stärksten abgeleiteten Klasse auf.
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
noneoderspaceim 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) |