2011-01-18 8 views
7

Dado el siguiente código:¿Cómo se establece la configuración regional cout para insertar comas como separadores de miles?

cout << 1000; 

Me gustaría que el siguiente resultado:

1,000 

Esto se puede hacer usando std :: local, y la función cout.imbue(), pero me temo Me puede estar perdiendo un paso aquí. ¿Puedes distinguirlo? Actualmente estoy copiando la configuración regional actual y agregando una faceta separadora de miles, pero la coma nunca aparece en mi salida.

template<typename T> class ThousandsSeparator : public numpunct<T> { 
public: 
    ThousandsSeparator(T Separator) : m_Separator(Separator) {} 

protected: 
    T do_thousands_sep() const { 
     return m_Separator; 
    } 

private: 
    T m_Separator; 
} 

main() { 
    cout.imbue(locale(cout.getloc(), new ThousandsSeparator<char>(','))); 
    cout << 1000; 
} 
+0

¿Ha intentado compilar el código exacto que desea que creamos que está utilizando? –

+0

posible duplicado de [¿Existe una función incorporada que separe coma un número en C, C++ o JavaScript?] (Http://stackoverflow.com/questions/3479485/is-there-a-built-in- function-that-comma-separates-a-number-in-cc-or-javascri) –

+0

¿Hay un memleak? –

Respuesta

6

La implementación predeterminada de do_thousands_sep ya vuelve ','. Parece que debes anular do_grouping en su lugar. do_grouping devuelve una cadena vacía de forma predeterminada, lo que significa que no hay agrupación. Esto significa grupos de tres dígitos cada uno:

string do_grouping() const 
{ 
    return "\03"; 
} 
+0

¿Qué representa el "\ 03"? ¿Eso es ASCII para "fin de texto"? Si es así, ¿por qué? –

+1

@Cory: do_grouping devuelve una cadena que se trata como una matriz de números de una char que representan el tamaño del grupo. "\ 03" crea una cadena que tiene un solo carácter con valor numérico 3, lo que significa que los grupos tendrán 3 dígitos cada uno. – ybungalobill

+0

El valor predeterminado no es ','. El C local no usa agrupación, de lo contrario es específico local. –

Cuestiones relacionadas