double und komma
-
Moin
Zum Rechnen benutze ich double
z.B.
m_Ergebniss
m_Edit1
m_Edit2
sind alle doublem_Ergebniss = (m_Edit1) + (m_Edit2);
das klabbt auch gut aber mein Problem ist ich möchte mit komma (",") statt (".") arbeiten.
Wenn ich ein Komma in Edit1 oder Edit2 rein schreibe und Rechnen lasse bekomme ich als meldung
"Geben Sie bitte eine Zahl ein"
mit (".") klabbts ohne meldungWie kann ich es mit (",") Realsieren ohne das die Meldung kommt.
Danke euch im voraus!
-
Am besten mit CString-Editfeldern arbeiten und dann die Kommas (',') durch Dezimalpunkte ('.') ersetzen.
Danach mit atof() in die gewünschte Float-Variable konvertieren und damit weiterrechnen.
Bei der Ausgabe der Ergebnisse in Editfelder: Auch CString-Editfelder verwenden, mit CString::Format("%f", MeineFloatVariable) wieder in einen CString wandeln und auch hier dann umgekehrt die Dezimalpunkte in Kommas wandeln. Bei Format kann dann auch noch anfgegeben werden, dass z.B. nur eine bestimmte Anzahl an Nachkommastellen verwendet werden soll.
-
Das liegt daran, dass die CRT mit der locale "C" per default gestartet wird und dies entspricht der amerikanischen Zahlendarstellung.
Du kannst natürlich dies ändern, indem Du setLocale(LC_ALL, "german") aufrufst.Aber da hast Du einen der größten Nachteile von C/C++ gefunden...
Im .NET-Framework haben z.B. alle Funktionen die locale-spezifisch sind einen optionalen Parameter, welchem Du explizit mitgeben kannst wie es formatiert werden soll.
In VC8 hat MS auch solche Funktionen für die CRT spendiert. Die enden dann mit "_l" (z.B. _sprintf_l): http://msdn2.microsoft.com/en-us/library/ybk95axf.aspx
-
Ich danke euch AndRo67 und Jochen Kalmbach.
Jochen wie kann ich das
setLocale(LC_ALL, "german")
aufrufen.
-
#include <locale.h>
Und dann in InitInstance (o.s.ä.):
setlocale(LC_ALL, "german");
-
Jochen Kalmbach schrieb:
Das liegt daran, dass die CRT mit der locale "C" per default gestartet wird und dies entspricht der amerikanischen Zahlendarstellung.
Du kannst natürlich dies ändern, indem Du setLocale(LC_ALL, "german") aufrufst.Aber da hast Du einen der größten Nachteile von C/C++ gefunden...
Im .NET-Framework haben z.B. alle Funktionen die locale-spezifisch sind einen optionalen Parameter, welchem Du explizit mitgeben kannst wie es formatiert werden soll.
In VC8 hat MS auch solche Funktionen für die CRT spendiert. Die enden dann mit "_l" (z.B. _sprintf_l): http://msdn2.microsoft.com/en-us/library/ybk95axf.aspx
was ist C/C++ ?
-
camper schrieb:
was ist C/C++ ?
C bzw. C++.
setlocale geht mit beiden...
-
Danke euch allen hat mir weiter geholfen.
-
mein nächstes Problem!!
//Das hier ist für eingabefeld m_d1 (double) UpdateData(true); m_gesammt = m_d1 + m_d2; UpdateData(false);
Wenn ich eine zahl eingebe und dann ein komma, dann geht der courser vor der zahl.
Mein ziel ist das ich z.b. "3,2" eingebe und das auch so bleibt.
z.Zt. ist das so, wenn ich "3,2" eingebe sehe ich "23"wie kann ich am einfachsten machen???
thx
-
Hast Du Rechts-Links eingeschaltet!?
Und ganz nebenbei: Ich Rate Dir, dass Du ein CEdit verwendest und es nicht direkt einem double zuweist... da hast Du dann viel mehr Kontrolle über die Anzeige...
-
habe ich schon probiert!
-
Ich muss zugeben: Ich verstehe Dein Problem nicht...
-
ich möchte gerne wenn ich im Eingabefeld m_d1 Zahlen eingebe wie 3,2 und im Eingabefeld m_d2 sobald ich z.b 1,8 eingebe dass sofort gerechnet wird und als ergbniss 5 raus kommt.
Wenn ich es mit ein Buttom den ganzen code eingebe klabbts, aber möchtes gerne so haben das ohne ein Buttom geht.
-
Du musst auf die WM_KEYDOWN-Nachricht reagieren und kannst dann sofort rechnen und das Ergebnis ausgeben. Da CEdit musst Du AFAIK ableiten und dann OnKeyDown (osä.) überladen (hab gerade keine MSDN hier). Musst einfach mal in die Hilfe schauen...
-
Jochen Kalmbach schrieb:
(hab gerade keine MSDN hier). Musst einfach mal in die Hilfe schauen...
stimmt gibts NUR local auf dem rechner
pssst nicht weitersagen:
-
ajax schrieb:
stimmt gibts NUR local auf dem rechner
Hast du schon mal versucht die Online MSDN via GPRS vom PDA aus aufzurufen? Das Forum geht ja gerade noch
-
Ok... man muss es nicht Ableiten, Du musst Dich einfach auf ein Change benachrichtigen (kann man glaube ich sogar im Resource-Editor) (ON_EN_CHANGE) und dann holst Du den Text mit GetWindowText, wandelst ihn in eine Zahl um um Rechnest damit...