De la bonne utilisation des locales pour une utilisation cohérente des nombres flottants
Differences between the C Locale and the C++ Locales Archive le 21/10/2019
Par défaut, la locale est celle américaine. Ainsi, le séparateur décimal est le point (.
). Il est souhaitable d'utiliser celui de l'utilisateur.
En C, il n'existe qu'une seule locale configurable par #include <locale.h>
. Celle-ci est définie par la fonction setlocale
. Ainsi pour forcer l'utilisation de l'environnement locale, il convient de l'appeler de la façon suivante : setlocale (LC_ALL, "");
Cependant en C++, il existe plusieurs locales configurables par #include <locale>
(sans .h
). std::setlocale
est utilisée pour définir les fonctions identiques à celles du C (vsnprintf
par exemple) ou encore std::to_string (double)
.
Mais la locale de std::cout
, std::cerr
et std::cint
reste celle par défaut. Ainsi, il est nécessaire de définir également la locale de ces sorties par :
std::cout.imbue (std::locale ("")); std::cin.imbue (std::locale ("")); std::cerr.imbue (std::locale (""));