std::money_put<CharT,OutputIt>:: put, do_put
|
Definido en el encabezado
<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) | |
Formatea el valor monetario y escribe el resultado en el flujo de salida.
do_put
de la clase más derivada.
Dada la secuencia de caracteres de los pasos anteriores, si el primer carácter es igual a ct. widen ( '-' ) , llama a mp. neg_format ( ) para obtener el patrón de formato; de lo contrario, llama a mp. pos_format ( ) , donde mp es el facet std:: moneypunct < CharT, intl > imbricado en str. getloc ( ) .
Los caracteres separador de miles y punto decimal se insertan según lo requerido por mp. grouping ( ) , mp. frac_digits ( ) , mp. decimal_point ( ) , y mp. thousands_sep ( ) , y la cadena resultante se coloca en la secuencia de salida donde value aparece en el patrón de formato.
Si str. flags ( ) & str. showbase es distinto de cero (se utilizó el manipulador std::showbase ), entonces el símbolo o cadena monetaria se genera llamando a mp. curr_symbol ( ) y se coloca en la secuencia de salida donde aparece symbol en el patrón de formato.
Si mp. positive_sign ( ) (en caso de que se utilice el patrón de formato positivo) o mp. negative_sign ( ) (en caso de que se utilice el patrón de formato negativo) devuelve una cadena con más de un carácter, el primer carácter devuelto se coloca en la secuencia de salida donde sign aparece en el patrón de formato, y el resto de los caracteres se colocan después de todos los demás caracteres. Por ejemplo, el patrón de formato { sign, value, space, symbol } con unidades 123 y negative_sign de "-" podría resultar en "-1.23 €" , mientras que negative_sign de "()" generaría "(1.23 €)" .
Si el número de caracteres generados para el formato especificado es menor que el valor devuelto por str. width ( ) , entonces se insertan copias de fill para llevar la longitud total de la secuencia de salida exactamente a str. width ( ) , de la siguiente manera:
-
Si
str.
flags
(
)
&
str.
adjustfield
es igual a
str.
internal
, los caracteres de relleno se insertan donde aparezca
noneospaceen el patrón de formato. - De lo contrario, si str. flags ( ) & str. adjustfield es igual a str. left , las copias de fill se añaden después de todos los demás caracteres.
- De lo contrario, los caracteres de relleno se colocan antes de todos los demás caracteres.
Al final, llama str. width ( 0 ) para cancelar los efectos de cualquier std::setw .
Contenidos |
Valor de retorno
Un iterador que apunta inmediatamente después del último carácter producido.
Notas
Se asume que las unidades monetarias son las unidades no fraccionarias más pequeñas de la moneda: centavos en Estados Unidos, yenes en Japón.
Ejemplo
#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'; }
Salida:
In Russian locale, -123,45 prints as -1.23 руб With negative_sign set to "()", it prints as (1.23 руб)
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 328 | C++98 | la cadena de formato utilizada para std::sprintf era "%.01f" | corregido a "%.0Lf" |
Véase también
|
define los parámetros de formato monetario utilizados por
std::money_get
y
std::money_put
(plantilla de clase) |
|
|
analiza y construye un valor monetario a partir de una secuencia de caracteres de entrada
(plantilla de clase) |
|
|
(C++11)
|
formatea y emite un valor monetario
(plantilla de función) |