Darstellung von Nachkommastellen in einem Control üder DoDataExchange



  • In einem Dialogfeld sollen Einstellungen für eine Steuerung dargestellt werden. Die einzelnen Spannungs- und Geometriewerte liegen als float- bzw. double-Werte vor. Dazu sind in dem Dialogfeld statische Textfelder implementiert, denen jeweils ein Membervariable zugordnet ist. Per DoDatatExchange werden die Werte auch richtig aktualisiert. Mein Problem ist jetzt, dass ich die Werte gern nur mit 3 Nachkommastellen angezeigt haben möchte. Gibt es da eine Möglichkeit innerhalb der DoDataExchange das einzugrenzen?

    void CKalibrierungWMA::DoDataExchange(CDataExchange* pDX)
    {
    	CDialog::DoDataExchange(pDX);
    	DDX_Control(pDX, IDC_RADIUS_KLEIN, m_CtrlZylklein);
    	DDX_Text(pDX, IDC_RADIUS_KLEIN, m_dRadZyl1);
    	DDX_Control(pDX, IDC_RADIUS_GROSS, m_CtrlZylgross);
    	DDX_Text(pDX, IDC_RADIUS_GROSS, m_dRadZyl2);
    	DDX_Control(pDX, IDC_STAT_LINKS_MW_NEW, m_CtrlStatRLinksMWnew);
    	DDX_Text(pDX, IDC_STAT_LINKS_MW_NEW, m_dStatRLinksMWnew);
    	DDX_Control(pDX, IDC_STAT_LINKS_MW_OLD, m_CtrlStatRLinksMWold);
    	//usw.
    }
    

    Weiterhin sollen auch Nachkommastellen angezeigt werden, wenn der Wert nur aus einer ganzen Zahl besteht. z.B.: 32 soll als 32.000 angezeigt werden.
    Wie geht man das ran? Sollte man die Zahlen runden und dann in Text umwandeln und es dem Control zuordnen?



  • AndyDD schrieb:

    Wie geht man das ran? Sollte man die Zahlen runden und dann in Text umwandeln und es dem Control zuordnen?

    So mache ich das IMMER mit Kommazahlen. Nervt zwar, aber was besseres habe ich bisher noch nicht gefunden.



  • estartu schrieb:

    AndyDD schrieb:

    Wie geht man das ran? Sollte man die Zahlen runden und dann in Text umwandeln und es dem Control zuordnen?

    So mache ich das IMMER mit Kommazahlen. Nervt zwar, aber was besseres habe ich bisher noch nicht gefunden.

    Macht Du das dann auch in der DoDataExchange oder schreibst Du da auch eine separate Methode? Ich hab das jetzt mal so gemacht:

    void CKalibrierungWMA::DoDataExchange(CDataExchange* pDX)
    {
    	CString	Anzeige;
    	CDialog::DoDataExchange(pDX);
    	DDX_Control(pDX, IDC_RADIUS_KLEIN, m_CtrlZylklein);
    	DDX_Text(pDX, IDC_RADIUS_KLEIN, m_dRadZyl1);
    	m_CtrlZylklein.GetWindowText(Anzeige);
    	Anzeige.Format("%.3f",(double)atof(Anzeige));
    	m_CtrlZylklein.SetWindowText(Anzeige);
    	//usw.
    }
    

    Scheint zu funktionieren, aber sieht irgendwie dirty aus.
    Großes Thema Runden. Hab hier auch schon einige Beiträge dazu gefunden. Gibts im C++ echt keine Funktion dafür (außer ceil und floor?)



  • Cool, so habe ich das noch nicht ausprobiert. 😃
    Ich hab das bisher immer in der Funktion drin, wo ich was Anzeige oder Speichere.



  • estartu schrieb:

    Cool, so habe ich das noch nicht ausprobiert. 😃
    Ich hab das bisher immer in der Funktion drin, wo ich was Anzeige oder Speichere.

    Also nutzt Du die DoDataExchange gar nicht? Wie rundest du? Man kann ja den CString an der entsprechenden Stelle manupulieren und dann den Rest abschneiden oder mit ceil und floor arbeiten.


Log in to reply