Code C : Afficher / Ecrire les nombres à décimal (float/double) avec la virgule

En C par défaut la locale est « C » (implémentation portable) : cela implique que les nombres à décimal utilisent le séparateur ‘.’. Cela ne pose en général pas de problème, car le développeur à l’habitude de coder ses nombres avec ce séparateur.

C’est plus problématique dans certaines situations : lorsque le programme exporte des fichiers de mesures au format CSV pour exploitation sous Excel. Les nombres ne sont pas reconnus à moins de paramétrer une locale différente.

Une solution est donc d’utiliser l’API locale.h disponible depuis C89 (selon mon manpage).
Le code que je propose est tiré d’un billet stackoverflow.

Il est volontairement limité à la modification du format d’affichage des nombres, mais la consultation du manpage détaille la possibilité d’un impact élargi aux expressions régulières, nombres monétaires,…


#include
#include

int main()
{
float f = 12345.67;

// obtain the existing locale name for numbers
char *oldLocale = setlocale(LC_NUMERIC, NULL);

// inherit locale from environment
setlocale(LC_NUMERIC, "");

// print number
printf("%'.2f\n", f);

// set the locale back
setlocale(LC_NUMERIC, oldLocale);
}

À propos de Selso

Salut ! Je m'appelle Selso. Je vis à Saint-Etienne depuis 2005. Je suis ingénieur en informatique embarquée en poste chez CIO Systèmes Embarqués.
Cette entrée a été publiée dans Développement, Informatique. Vous pouvez la mettre en favoris avec ce permalien.

Laisser un commentaire