Seite 1 von 1

[gelöst] Qt schneidet Nachkommastellen ab -> setLocal(..

Verfasst: 29. Oktober 2009 15:33
von Baz
Hi,

irgendwie bin ich auf etwas Kurioses gestoßen. Ich habe mein Programm letztens auf einem Linux 64 Bit System mit Debian Lenny ausprobiert (Qt Version 4.5.1). Unter anderem nutze ich auch die gSoap Bibliothek und mir ist dabei aufgefallen, dass merkwürdiger Weise alle Doubles auf der Serverseite abgeschnitten ankommen. Erst dachte ich es würde an gSoap liegen, aber nach längerem Ausprobieren fiel mir auf, dass es an Qt liegt, hier der Code:

Code: Alles auswählen

#include <QDebug>

int main(int argc, char *argv[])
{
	//QCoreApplication a(argc, argv);

	const char* ds = "1.234";
	double d;
	char *r;
	d = strtod(ds, &r);
	qDebug()  << d;

	return 0;
}
Soweit klappt alles, kommentiert man nun die CoreApplication wieder ein, bekommt man als Ausgabe nur noch eine 1.

Hat jemand eine Idee an was das liegen könnte? Ist es einfach ein übler Bug? Unter 32 Bit funktioniert alles wunderbar.

Gruß Michael

Verfasst: 29. Oktober 2009 17:03
von Christian81
ich würde sagen die Locale passt nicht mehr.
'man setlocale'

Verfasst: 29. Oktober 2009 20:40
von Baz
Hier sind die Einstellungen für locale:

krombacher:~# locale
LANG=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=

Wüsste jetzt nicht was da ggf nicht stimmen könnte, aber ich lasse mich gerne eines Besseren belehren ;).

Verfasst: 29. Oktober 2009 23:30
von guenni81
Müsste glaub ich mitlehrweile de_DE.utf8 heißen, aber schau mal mit locale -a nach.

Verfasst: 29. Oktober 2009 23:37
von Baz
krombacher:~# locale -a
C
de_DE.utf8
POSIX

Da das aber alles von Debian stammt und autogeneriert wird, wäre es sonst ein Bug in Debian...

Verfasst: 30. Oktober 2009 00:08
von guenni81
Versuche es mal mit dem de_DE.utf8 ob es wirklich daran liegt. Bei TYPO3 hat mir das nämlich weitergeholfen.

Verfasst: 30. Oktober 2009 06:32
von Christian81
Baz hat geschrieben: Wüsste jetzt nicht was da ggf nicht stimmen könnte, aber ich lasse mich gerne eines Besseren belehren ;).
Und seit wann ist ein Punkt wie in "1.234" ein gültiges Trennzeichen in der deutschen Sprache?
Setz die locale auf C (in deinem Programm natürlich) und es funktioniert...

Verfasst: 30. Oktober 2009 11:05
von Baz
Ich muss zugeben, dass es ja etwas peinlich ist, weil das genau so auch in der Doku von QCoreApplication steht... Auf jeden Fall es funktioniert, vielen Dank :)