14 julio 2005

Una tontería de C en linux

Viendo una pregunta en un foro, recordé un pequeño problema que tuve en su momento con C en Solaris (unix de Sun) y que nos trajo de cabeza a mí y a unos compañeros mios bastante tiempo.

El problema es que los decimales desaparecian al echar cuentas. Un programa tan tonto como este

main()
{
double a=5.4;
double b=0.1;
cout << a-b << endl;
}

daba de resultado 5, en vez de 5.3. Los decimales desaparecían. El problema era la variable de entorno LANG. Estaba definida por defecto a es (de español)

LANG=es;
export LANG;

Esto hacía que el compilador se liara. Consideraba que el punto decimal debía ser la , en vez de el . y de alguna forma, ignoraba los decimales.

Simplemente cambiándola por

LANG=c
export LANG;

y volviendo a recompilar el programa... ¡Todo arreglado!

No hay comentarios: