Forum: PC-Programmierung Kommazahlen in C++ GUI darstellen bzw. ausgeben


von Markus (Gast)


Lesenswert?

Guten Morgen,

ich hoffe nicht das der Titel zu irreführund ist oder es ihn gar schon 
gab, also meine Frage besteht darin wie ich in einem C++ Programm in der 
GUI speziell in einem Label Zahlen mit Nachkommastellen errechne und 
ausgeben lassen kann.
Habe dazu schon etwas gegoogelt und bin dabei auf dieses Forum gestoßen, 
dabei habe ich auch schon viele Beiträge zu dem Thema gesehen nur keins 
gefunden welches mir wirklich weitergeholfen hat.
So nun zum eigentlichen Problem:
zur Einführung ein Ausschnitt von Code:

Lösung32->Text=Convert::ToString(Convert::ToInt32(Lösung25->Text)/(Conve 
rt::ToInt32(Lösung31->Text)))

LösungXX steht dabei für ein Label in denen sich Zahlen bzw. schon 
vorher errechnete Zahlen befinden. Wenn also nun 4/3 gerechnet wird dann 
erhalte ich 1 als Ausgabe und keine Kommazahl, nun ich habe habe auf 
meinem Google weg den Begriff "float" gefunden und auch herrausgelesen 
das dieser auf 7 Stellen genau ist, das würde für meine simple Rechnung 
ausreichen. Aber ich habe nirgends gefunden wie ich den in meinen Code 
einbinde. Nach langer Rede (ich entschuldige mich dafür) kurzer Sinn: 
Wie binde ich "float" in meinen Code ein?

MfG Markus
P.S.: Ich bin für jede Hilfe dankbar =)

von TriHexagon (Gast)


Lesenswert?

Tut mir Leid so funktioniert das nicht. Das sind ESSENTIELLE Grundlagen, 
also besorg dir ein C++ Buch und arbeite das durch. Falls es dann noch 
Fragen geben sollte, kannst du gerne fragen. Aber ein Mindestmaß an 
Eigeninitiative muss schon gefordert sein dürfen. C++ lernt man nicht 
einfach so.

Das soll ein gut gemeinter Rat sein. Es ist nur so, dass es schon öfter 
welche gab, die dachten sich um eine ordentliche Lektüre drücken zu 
können und dann denken das Forum mit Nichtigkeiten vollmüllen zu müssen.

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

Markus schrieb:
> Wie binde ich "float" in meinen Code ein?
So wie alle anderen Datentypen auch.

von Mark B. (markbrandis)


Lesenswert?

1
Lösung32->Text

Ein Veriablenname mit nem Umlaut drin?

Skurril.

von Dirk B. (dirkb2)


Lesenswert?

Durch das ToInt32 bekommst du einen Integer.

Integer/Integer wird als Integerdivision berechnet.

Such dir die Convertmethode für float (oder double) raus und wende 
das an.

Es geht auch mit einem cast.

von Markus (Gast)


Lesenswert?

alles klar, dann kämpf ich mich da mal durch ^^
trotzdem Danke für die Hilfe

Mark Brandis schrieb:
> Ein Veriablenname mit nem Umlaut drin?

funktioniert in Visual Studio, also hab ich schon getestet... eigenartig 
geb ich zu, aber klappt tatsächlich.

Also einfach kein Forum für Anfänger, gut dann kann dieser Beitrag 
gelöscht werden.

MfG Markus

von Karl H. (kbuchegg)


Lesenswert?

Markus schrieb:

> funktioniert in Visual Studio, also hab ich schon getestet... eigenartig
> geb ich zu, aber klappt tatsächlich.

Ist trotzdem keine gute Idee.
Halte dich an die einfache Regel: Alles was ein Amerikaner nicht kennt, 
ist in Programmquelltext von Übel.

> Also einfach kein Forum für Anfänger,

Anfänger schon. Aber es gibt auch eine untere Niveaugrenze, unter der 
man noch nicht mal Anfänger ist und unter der es keinen Sinn hat. Auch 
wer gerade mit einer Lehre als KFZ-Mechaniker anfängt, sollte schon 
wissen, wie rum man einen Schraubenzieher hält. In diesem Bereich 
leuchtet das jedem ein, nur seltsamerweise denkt die Mehrheit, man 
bräuchte keine Grundlagen um Programmieren zu können. Ein paar 
Stichworte auf einer Web-Seite aufschnappen bzw. ein paar Fragen in 
einem Forum stellen reicht da einfach nicht. Ordentliche Literatur hat 
nicht ohne Grund Seitenzahlen von 200 aufwärts.

FAQ: Datentypen in Operationen
(Das dort gesagte gilt gleichermassen für C++)

: Bearbeitet durch User
von Markus (Gast)


Lesenswert?

Dirk B. schrieb:
> Such dir die Convertmethode für float (oder double) raus und wende
> das an.

Danke!
Obwohl ich jetzt im Nachhinein zugeben muss das hätte ich mir auch 
denken können (naja kommt davon wenn man gegen 00:00 programmiert) aber 
vielen Dank für diesen Rat und die große Hilfe hier im Forum =)

MfG Markus

von Markus (Gast)


Lesenswert?

Karl Heinz schrieb:
> Anfänger schon. Aber es gibt auch eine untere Niveaugrenze

Okay, dann kann ich nichts weiter machen als mich für diesen Beitrag 
hier zu entschuldigen.
Die Tatsache das ich mein Buch: "C++: Objektorientiertes Programmieren 
von Anfang an" nur bis zur Hälfte gelesen habe dürfte wahrscheinlich 
Aufschluss darüber geben warum ich hier solche Fragen stelle.
Also nochmal tut es mir leid und ihr könnt diesen Beitrag vergessen.

MfG Markus

von Dirk B. (dirkb2)


Lesenswert?

Markus schrieb:
> Die Tatsache das ich mein Buch: "C++: Objektorientiertes Programmieren
> von Anfang an" nur bis zur Hälfte gelesen habe dürfte wahrscheinlich
> Aufschluss darüber geben warum ich hier solche Fragen stelle.

Die ürsprüngliche Frage war:
Markus schrieb:
> Wie binde ich "float" in meinen Code ein?

Datentypen sind mit das erste, was man lernt. Sie gehören zu den 
Grundlagen.

Entweder du hast das Buch nicht richtig gelesen oder
das Buch setzt selber Grundkenntnisse voraus (die du nicht hast) oder
das Buch ist schlecht.

Was meinst du?


Ach, und schließe niemals von "in Visual Studio geht das" darauf, dass 
es auch woanders so funktioniert. Der C++ (und auch C)-Standard gibt den 
Compilerbauern bei einigen Dingen Freiheiten in der Auslegung.

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

Mark Brandis schrieb:
> Ein Veriablenname mit nem Umlaut drin?
>
> Skurril.
Viel schlimmer. Visual Studio 2013 compiliert sogar sowas ohne mit der 
Wimper zu zucken:
1
int main( void )
2
{
3
  int ößf£ÆÿþȈÇże = 23;
4
  return 0;
5
}
In Visual Studio ist die Warnstufe standardmaessig auf /W3 gestellt, 
dadrueber gibt es noch /W4 und /Wall.

Die Warnstufe auf /Wall und am besten noch auf /Werror zu stellen hat 
allerdings keinen Mehrwert, da man sobald man eine Includeanweisung hat 
(und das is meistens zwangsweise so, z.B. iostream, string, string.h, 
stdio.h, ...) mit Fehlermeldung erschlagen wird (die meisten sind:
1
warning C4514: '<hier beliebigen funktionsnamen einfuegen>': Nicht referenzierte Inlinefunktion wurde entfernt
oder aber:
1
warning C4710: '<hier beliebigen funktionsnamen einfuegen>': Funktion ist nicht "inline"
). Bei der Fülle an Fehlemldungen die mir hier gerade entgegenschlaegt, 
sind Umlaute bzw. Sonderzeichen in Variablennamen echt das kleinste 
Problem an der ganzen sache. Es ist praktisch sinnlos und gleichermassen 
unmoeglich unter Visual Studio mit /Wall und/oder /Werror zu 
compilieren. Aber wer will schon Warnungen sehen... sind ja nur 
warnungen und keine fehler, und damit ist doch alle super...

von Rolf Magnus (Gast)


Lesenswert?

Kaj G. schrieb:
> Mark Brandis schrieb:
>> Ein Veriablenname mit nem Umlaut drin?
>>
>> Skurril.
> Viel schlimmer. Visual Studio 2013 compiliert sogar sowas ohne mit der
> Wimper zu zucken

Das ist in C++ ja auch nicht per se verboten. Allerdings ist es keine 
gute Idee, da man sich jede Menge Probleme damit einhandeln kann.
Sei doch froh, dass Microsoft es wenigstens nicht wie bei VBA macht, 
also so, dass bei der deutschen Version auch alle vorhandenen 
Bibliotheksfunktionen deutsche Namen haben.

von Halblanghaarkatzenhalter (Gast)


Lesenswert?

Kaj G. schrieb:
> Viel schlimmer. Visual Studio 2013 compiliert sogar sowas ohne mit der
> Wimper zu zucken:
>   int ößf£ÆÿþȈÇże = 23;

ISO/IEC 14882:2011

An identifier is an arbitrarily long sequence of letters and digits. Each 
universal-character-name in an identifier shall designate a character 
whose encoding in ISO 10646 falls into one of the ranges specified in 
E.1.

...

E.1 Ranges of characters allowed
00A8, 00AA, 00AD, 00AF, 00B2-00B5, 00B7-00BA, 00BC-00BE, 00C0-00D6, 
00D8-00F6, 00F8-00FF
0100-167F, 1681-180D, 180F-1FFF
200B-200D, 202A-202E, 203F-2040, 2054, 2060-206F
2070-218F, 2460-24FF, 2776-2793, 2C00-2DFF, 2E80-2FFF
3004-3007, 3021-302F, 3031-303F
3040-D7FF
F900-FD3D, FD40-FDCF, FDF0-FE44, FE47-FFFD
10000-1FFFD, 20000-2FFFD, 30000-3FFFD, 40000-4FFFD, 50000-5FFFD,
60000-6FFFD, 70000-7FFFD, 80000-8FFFD, 90000-9FFFD, A0000-AFFFD,
B0000-BFFFD, C0000-CFFFD, D0000-DFFFD, E0000-EFFFD

Ich glaube, in g++ gibt es dafür einen Schalter (experimental feature), 
weil es damit nicht immer ganz problemslos funktioniert. Interessiert 
mich aber nicht die Bohne, da es ohnehin eine Sch...idee ist - da sind 
wir uns wohl alle einig ...

> In Visual Studio ist die Warnstufe standardmaessig auf /W3 gestellt,
> dadrueber gibt es noch /W4 und /Wall.
> Die Warnstufe auf /Wall und am besten noch auf /Werror zu stellen hat
> allerdings keinen Mehrwert, da man sobald man eine Includeanweisung hat
> (und das is meistens zwangsweise so, z.B. iostream, string, string.h,
> stdio.h, ...) mit Fehlermeldung erschlagen wird

Ja, das ist in der Tat ätzend.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Halblanghaarkatzenhalter schrieb:
> E.1 Ranges of characters allowed
> ...

Das £-Zeichen ist in in dieser Liste nicht enthalten, deswegen sollte
der Compiler eine Fehlermeldung ausgeben. Tut dies der Compiler in
Visual Studio 2013 nicht, ist dies ein Bug.

von Halbschrat (Gast)


Lesenswert?

Yalu X. schrieb:
> Das £-Zeichen ist in in dieser Liste nicht enthalten

Hattest du das im Kopf? Nicht schlecht.

Mark Brandis schrieb:
>> Lösung32->Text
> Ein Veriablenname mit nem Umlaut drin?
> Skurril.

Keine Ahnung, wie das bei C++/CLI überhaupt ist.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Halbschrat schrieb:
> Yalu X. schrieb:
>> Das £-Zeichen ist in in dieser Liste nicht enthalten
>
> Hattest du das im Kopf? Nicht schlecht.

Sag bloß, du hast das nicht sofort gesehen ;-)

Nein, nein, ich habe den Code mangels Visual Studio einfach mal durch
den Clang geschickt, und der meckert das £-Zeichen an. Ich wusste also
schon, nach welchem Zeichen ich in der Liste suchen musste, und da diese
aufsteigend sortiert ist, ging das ganz fix :)

Interessanterweise verbietet der Standard das £- und das $-Zeichen¹,
akzeptiert aber das €-Zeichen sowie die meisten anderen Währungssymbole.
Haben sich denn die Amis und die Briten bei den Treffen des ISO-Gremiums
so schlecht benommen? ;-)

———————————
¹) Beim $-Zeichen wird es wohl daran liegen, dass dieses von einigen
   Compilern in Spracherweiterungen bereits genutzt wird, aber bei £ als
   Nicht-ASCII-Zeichen wundert es mich schon etwas.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Yalu X. schrieb:
> Beim $-Zeichen wird es wohl daran liegen, dass dieses von einigen
>    Compilern in Spracherweiterungen bereits genutzt wird

OS-9/68k verwendete das $-Zeichen für Betriebssystemaufrufe, aber ich 
habe mit OS-9 gearbeitet, als es dafür noch keinen ANSI-C-Compiler gab 
...

Brr. Schrecklich.

von Karl H. (kbuchegg)


Lesenswert?

Dirk B. schrieb:

> Entweder du hast das Buch nicht richtig gelesen oder
> das Buch setzt selber Grundkenntnisse voraus (die du nicht hast) oder
> das Buch ist schlecht.
>
> Was meinst du?

Offenbar irgend so ein 'Managed C++' Verschnitt.

von Karl H. (kbuchegg)


Lesenswert?

Markus schrieb:

> Die Tatsache das ich mein Buch: "C++: Objektorientiertes Programmieren
> von Anfang an" nur bis zur Hälfte gelesen habe dürfte wahrscheinlich
> Aufschluss darüber geben warum ich hier solche Fragen stelle.

Es dürfte eher darüber Aufschluss geben, dass dieses Buch nicht 
unbedingt für Komplett-Anfänger geeignet ist, sondern schon einen 
gewissen Grundlevel voraussetzt. Denn nach der Lektüre eines 
Einsteigerbuches, sollte der Leser schon in der Lage sein, zu erklären 
warum
1
    3.0 * 9 / 6
und
1
    3.0 * ( 9 / 6 )
bzw
1
    3 * 9 / 6
bzw.
1
    3 * ( 9 / 6 )
unterschiedliche Ergebnisse liefern, auch wenn sie mathematisch gesehen 
äquivalent sind. Der Unterschied hat ganz alleine damit zu tun, dass 
neben den Rechenregeln es in C++ (und C) auch so etwas wie Datentypen 
gibt, die die Art der Auswertung beeinflussen.
Und nein. Hier handelt es sich nicht um esoterisches Zusatzwissen, das 
nur in ganz seltenen Fällen benötigt wird. Bei Datentypen und ihren 
Auswirkungen handelt es sich um ganz zentrale Elemente aller typisierten 
Sprachen.

: Bearbeitet durch User
von Oliver R. (superberti)


Lesenswert?

Hi,

man sollte hier noch ergänzen, dass es nicht DAS C++-GUI gibt. Alle 
Programmiersprachen mit einem C im Namen (und bestimmt noch viele 
weitere) definieren in ihrem Standard nämlich gar keine 
Oberflächenbibliotheken.
Hält man sich also strikt an den Standard, dann hat man nur 
Konsolenprogramme.
Es gibt natürlich jede Menge Oberflächenbibliotheken, die man dann mit 
seiner Programmiersprache der Wahl auch nutzen kann.
Allerdings setzen manche Oberflächen auch bestimmte Frameworks voraus 
und damit auch bestimmte Programmiersprachen.
Z.B. braucht man eine .NET Programmiersprache (C#, Managed C++, Visual 
Basic .NET etc.), wenn man Oberflächen mit Windows Forms oder mit WPF 
erzeugen möchte.
Bei Markus sieht es so aus, als ob er mit Managed C++ arbeitet und damit 
versucht C++ zu lernen. Dummerweise ist das, was Microsoft mit Managed 
C++ geschaffen hat, alles andere als einsteigerfreundlich, da für die 
Anbindung an das .NET Framework viele Erweiterungen des C++-Standards 
vorgenommen wurden, die man als Einsteiger kaum verstehen kann. Es gibt 
z.B. drei Möglichkeiten Klassen zu erzeugen: Stack, Heap und Managed 
Heap.
Was ich damit sagen will:
Will man .NET machen (WPF oder Win Forms), dann sollte man tunlichst C# 
verwenden.
Möchte man (unmanaged) C++ lernen, dann würde ich Oberflächen erst 
einmal ganz ausklammern. Man kann mit Konsolenprogrammen genug 
Erfahrungen sammeln!
Managed C++ mit dem Visual Studio wäre jedenfalls das Letzte, was ich 
einem Einsteiger empfehlen würde.

Gruß
Oliver

von Halbzeitrückstandsgenießer (Gast)


Lesenswert?

Oliver R. schrieb:
> Möchte man (unmanaged) C++ lernen, dann würde ich Oberflächen erst
> einmal ganz ausklammern. Man kann mit Konsolenprogrammen genug
> Erfahrungen sammeln!

Die Empfehlung würde ich sogar auf andere Sprachen (inklusive C#) 
ausweiten.

> Managed C++ mit dem Visual Studio wäre jedenfalls das Letzte, was ich
> einem Einsteiger empfehlen würde.

Sehe ich aus so. Managed C++ wurde eigentlich aus zwei Gründen 
eingeführt: Erstens, um native Bibliotheken unter .NET nutzbar zu machen 
(man kann in Managed C++ bzw. C++/CLI einfach zwischen managed und nativ 
"umschalten"). Zweitens, um C++-Programmierern den Einstieg in die 
.NET-Welt etwas zu erleichtern. Der zweite Grund ist heute kaum noch 
relevant, da sich C# weiterentwickelt hat und durchaus zu den 
arrivierten Programmiersprachen gehört. Der erste spielt nur noch in 
wenigen Szenarien eine Rolle; inzwischen gibt es ein ganzes Arsenal an 
.NET-Bibliotheken - ganz abgesehen von den umfangreichen Bibliotheken, 
die direkt im Paket kommen. Sinnvoll sind fast nur noch Wrapper um 
hochoptimierte C++-Librarys (z.B. mit numerischen Funktionen).
C++/CLI ist also ein Werkzeug, dessen Einsatz in ganz bestimmten Fällen 
sinnvoll sein kann. Aber damit C++ lernen? Besser nicht ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.