Betrags-Vereinheitlichung (internationales Komma-Problem)
-
Da ich gerade gesehen habe, dass du die Klasse string benutzt, hab ich noch schnell ne C++ Variante geschrieben. Die Funktion sollte (das Testen überlasse ich wieder dir;-) mit allen Schreibweisen zurecht kommen:
#include <iostream> #include <string> #include <iomanip> using namespace std; double s2d(string s) { int c=0,p=0; for(string::iterator it = s.begin(); it != s.end(); it++) { if(*it == ',') { *it = '.'; c++; } else if(*it == '.') p++; } if(c > 1 || p > 1) { string::size_type end; if(!c || !p) end = s.length() -1; else end = s.rfind("."); for(string::size_type ip = 0; ip < end; ) { if(s[ip] == '.') { s.erase(ip,1); end--; } else ip++; } } return atof(s.c_str()); } int main() { string s[] = { "1,23", "1.23", "1,234,567", "1,234,567.89", "1.234.567", "1.234.567,89", "123" , "123.4567", "-234,555,666.544"}; cout.precision(16); for(int i=0; i < sizeof(s)/sizeof(string); i++) cout << setw(16) << s[i] << " -> " << s2d(s[i]) << endl; return 0; }
-
@interpreter...
wenn ich da sowas gepostet hätte unter www.fun-soft.de was die kommas durch punkte ersetzt dann hätte mir der virtual eins mit der keule übergezogen nachdem er gesagt hätte man soll setlocale verwenden
-
@windalf:
wat is nu schon wieder "setlocale "??@interpreter:
genial - super!
das posting sollte mal von 'nem OP in die FAQ geschoben werden!
-
Windalf schrieb:
@interpreter...
wenn ich da sowas gepostet hätte unter www.fun-soft.de was die kommas durch punkte ersetzt dann hätte mir der virtual eins mit der keule übergezogen nachdem er gesagt hätte man soll setlocale verwendenIs mir schon klar. ich hab setlocale zwar noch nie benutzt aber glaube nicht, dass das gereicht hätte. Im Grunde setzt man damit ja nur Einstellungen wie Tausendertrennzeichen etc. Der OP wollte jedoch das Umwandeln von verschiedenen Formaten "x,xxx.xx", "x.xxx,xx" usw.
Außerdem scheint es ihm ja offensichtlich doch geholfen zu habenZu setlocale:
http://home.fhtw-berlin.de/~junghans/cref/MAN/setlocale.htm
-
#include <stdlib.h> #include <locale.h> int main() { setlocale(LC_NUMERIC, "German"); printf("%f\n", atof("3,14")); }
bevor mich wieder alle kielholen... ja der zweite parameter ist nicht standardisiert...
-
...setlocale is dann wohl eher linux-spezifisch und nicht windoofs
hat auf jeden fall geholfen - läuft auch schon - die c++ variante scheint mir irgendwie schneller in der Verarbeitung zu sein (vielleicht auch nur einbildung?)
danke auf jeden fall - > und ab damit in die FAQs sag ich
-
..
-
Windalf schrieb:
#include <stdlib.h> #include <locale.h> int main() { setlocale(LC_NUMERIC, "German"); printf("%f\n", atof("3,14")); }
bevor mich wieder alle kielholen... ja der zweite parameter ist nicht standardisiert...
Wie ich in meinem letzten Posting bereits sagte, würde ihm das aber nicht reichen...
-
@interpreter...
ja muss zu meienr schande gestehen ich hab den post nicht richtig gelesen
-
Windalf schrieb:
@interpreter...
ja muss zu meienr schande gestehen ich hab den post nicht richtig gelesenDu Schwein!1