2010-11-12 128 views
10

Quiero crear una cadena en C++ con el siguiente formato:Separador de miles en C++

string + numbersWithFormatAndThousandSeparator + string 

No estoy seguro de si std::string o snprintf() proporciona el formato de esa manera especial el separador de miles. ¿Podría alguien ayudarme con esto?

Respuesta

0

información (incluyendo el separador de miles) para dar formato a los valores numéricos está disponible en la cabecera <clocale>. Ese encabezado proporciona una estructura lconv que tiene la información que necesita. En particular, la estructura tiene un miembro char *thousands_sep que podría ser justo lo que necesita.

Consulte la documentación de struct lconv para obtener todos los detalles.

2

BOOST mejora en el soporte del local C++ (así como dar claros ejemplos de su uso para mostrar los números de coma con miles separadores): ver http://cppcms.sourceforge.net/boost_locale/html/tutorial.html

+1

No veo en esa página los claros ejemplos sugeridos por esta respuesta. ¿Qué tal un enlace más directo, o mejor aún, ponga uno de los ejemplos aquí? –

1

Hay muchas maneras de dar formato correctamente un número en C++. Echa un vistazo a este artículo para obtener algunos de ellos (boost::lexical_cast es mi favorito personal): http://www.cplusplus.com/articles/numb_to_text/

+2

A menos que me falta cómo, lexical_cast no hace separadores de miles? –

+0

AFAIK lexical_cast usa la configuración regional actual. Entonces, si hay miles de separadores en la configuración regional, se analizarán/formatearán correctamente. –

4

manera rápida y fácil:

std::ostringstream ss; 
ss.imbue(std::locale("en_US.UTF-8")); 
ss << 1033224.23; 
return ss.str(); 

regresarían una cadena "1,033,244.23"

pero requiere en_US.UTF-8 local a configurarse en tu sistema

+4

THat funcionó para mí en una máquina, pero falló en otra ("locale not found" o algo así. Luego intenté simplemente 'ss.imbue (std :: locale (" "));'. Esto funcionó. Creo que " "selecciona la configuración regional predeterminada para su sistema, y ​​con suerte eso será lo que usted y sus usuarios desean. Tenga en cuenta que' locale() 'falló (no separador de miles). –

Cuestiones relacionadas