Nachkommastellen und null anzeigen????
-
hallo zusammen,
ich habe ein editcontrol vom Typ double und ich habe mit
CString zwi;
zwi.Format("%.2f",gesamtbetrag);die nachkommastellen definiert. Wenn der Betrag aber z.B. 4.00
zeigt er die nullen nicht an kennt einer eine funktion die das
macht????????
-
Das müsste %.02f sein, glaube ich.
-
morgen,
nein leider nicht habe ich probiert wieder keine anzeige der nullen...
-
Bei mir geht's so wie von dir gepostet...
EDIT: Zeig mal vollständigen Code, den ich bei mir ausführen kann (also mit einem konstanten float-Wert oder einer initialisierten Variable), und der bei dir genauso ausgeführt das Phänomen aufweist.
-
void CCASHSYSTEM10Dlg::OnBnClickedButton53()
{if (gruppen==1)
{
double preis1=9.20;
UpdateData(1);
CString zwi;
zwi.Format("%.2f",gesamtbetrag);
gesamtbetrag+=preis1;
artpreis.AddString("9.20");
UpdateData(0);
}gesamtbetrag ist ein editcontrol vom typ double
artpreis ist ein Listcontroles funktioniert alles bis auf die nullen die er nicht anzeigt...
in diesem fall macht er 9.2 ??????
-
Das liegt wahrscheinlich am Edit Control und der damit verbundenen Variable. Versuch es stattdessen mal mit SetDlgItemText (oder Controlvariable und SetWindowText). Hier übergibst du dann zwi.GetBuffer(). Denn im CString steht definitiv der korrekte String (mit Nullen aufgefüllt).
-
kannst du mir vielleicht in meinem fall ein beispiel geben?
ich weiß nicht so richtig wie du das meinst???? danke
-
Ok, sagen wir mal, dein Edit Control ist die Resource IDC_EDIT_1, dann müsste es so klappen:
CString zwi; zwi.Format("%.2f",gesamtbetrag); SetDlgItemText(IDC_EDIT_1, zwi.GetBuffer());
-
_matze schrieb:
CString zwi; zwi.Format("%.2f",gesamtbetrag); SetDlgItemText(IDC_EDIT_1, zwi.GetBuffer());
Warum bitte GetBuffer! Das führt evtl. zu einer internen Speicherallokation?
Besser:
SetDlgItemText(IDC_EDIT_1, zwi);
oder wenn es sein muss:
SetDlgItemText(IDC_EDIT_1, zwi.GetString());
-
leider funktioniert keines von beiden... immer noch keine nullen als
nachkommastellevielleicht noch eine Idee????
das mit der controlvariable hört sich nicht schlecht an aber wie
schreibe ich das ?????PS: hat denn keiner eine Idee???????????
-
jimmy0385 schrieb:
leider funktioniert keines von beiden... immer noch keine nullen als
nachkommastelleZeig mal Code, bitte.
Wie sieht denn deine CString-Variable aus? Sieh dir die mal im Debugger an, nachdem du CString::Format ausgeführt hast. Da muss dann eigentlich der richtig formatierte String mit Nullen stehen. Und SetDlgItemText wird die Nullen nicht wieder wegkürzen. Da wird nur Text kopiert. Also, schmeiß den Debugger an! Das ist jetzt der wichtigste Schritt, um deinen Fehler einzugrenzen.
Ach so, und vergiss die Control-Variable jetzt mal, das ist vom Ergebnis gleich (ob jetzt SetDlgItemText oder Ctl.SetWindowText...).
-
mein code:
void CCASHSYSTEM10Dlg::OnBnClickedButton25()
{
double preis1=2.00;
UpdateData(1);
gesamtbetrag+=preis1;CString zwi;
zwi.Format("%.2f",gesamtbetrag);
SetDlgItemText(IDC_EDIT1, zwi.GetString());rechnung.AddString("Artikel2");
UpdateData(0);
// TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
}beim debuggen kommt der haltepunkt bei der ersten klammer
alles was ich gepostet habe funktioniert nur wie gesagt nur die nachkommastellen nicht....
-
Die beiden UpdateData-Aufrufe brauchst du nicht, wenn du SetDlgItemText verwendest! Das könnte das Problem sein. Du kopierst schon den richtigen String, im Anschluss wird dann aber wieder der Wert aus der Variablen ins Control geschrieben, weil du unten noch UpdateData aufrufst. Also nimm die Aufrufe mal weg und sag Bescheid, ob es nun klappt.
Btw, der Haltepunkt wird da angesprungen, wo du ihn gesetzt hast. Du hättest ihn z.B. auf die Zeile nach CString::Format setzen können. Und auch wenn dein Haltepunkt zu früh ist, ist das ja kein Problem. Drücke einfach F10, um eine weitere Zeile auszuführen! Und das machst du dann solange, bis du auf der Wunschzeile bist. Und bei jedem Schritt kannst du die Maus über einen Variablennamen führen, um dann per Tooltip den Wert der Variablen angezeigt zu bekommen. So kannst du sehen, was in deinem CString vor und nach CString::Format wirklich steht. Dieses Wunder der modernen Zeit nennt sich Debugger!
-
morgen,
jo hat geklappt vielen dank matze....
allerdings habe ich jetzt nur noch ein kleines problem mit dem
unterdialog ..
sobald im unterdialog der Ok Button gedrückt wird ändert er
den Wert in Hauptdialog von 1.00 auf 1 ..
hier mein code vom unterdialog
void unterdialog1::OnBnClickedButton4()
{ofstream datei;
datei.open("zwischenspeicher.txt"); //Weiter wie gehabt
if (!datei.good())
{
MessageBox ("Fehler beim Öffnen der Datei");
return;
}
CString zwischen;
int x = auswahl1.GetCount();for(int i= 0;i<x;i++)
{auswahl1.GetText(i,zwischen);
if(i != 0)datei<<" ";
datei<<zwischen;}
datei.close();
UpdateData(0);
OnOK();
}