Runden in BCB 5
-
Hi
Wie kann man eine Anzeige so anzeigen, dass die Nachkommastellen nicht mehr sichtbar sind?
MfG
Carl
-
carldefrance schrieb:
Hi
Wie kann man eine Anzeige so anzeigen, dass die Nachkommastellen nicht mehr sichtbar sind?
MfG
CarlWas verstehst du unter einer Anzeige? Eine Double Variale oder etwa einen AnsiString?
Bei einer Double variable solltest du dir die methode round() der klasse math mal anqucken.
Und wenn es nen String ist einfach mit pos(".") die postition des Punktes oder des Kommas finden und das + alles was dahinter kommt mit .delete löschen!
Hoffe ich konnte helfen!
Cya
Dagsta
-
Ganz einfaches Runden:
((int)(my_double+0.5))
-
Also wenn es um die formatierte Ausgabe einer Fließkommavariablen in einen AnsiString geht, bietet sich AnsiString::FloatToStrF() an.
Es sei mir gestattet zu erwähnen, dass Fließkommawerte in C++ so ihre Tücken haben. Es gibt Werte die lassen sich nicht exakt darstellen.
Zum Runden (aus Christian Marquardts C-Ecke):
Rundet Prozessorunabhängig.
Hier ist die math.h einzubinden!Parameter:
double Zahl die zu runden ist
int Anzahl der zu rundenden Stellen
Rückgabewert:
double die gerundete Zahlinclude <math.h> .... double round(double zahl,int stellen) { double order=pow(10.0,stellen); return (int)(zahl*order+(zahl>0?0.5:-0.5))/order; };
-
Beispiel
400,93472342734
will ich nur die 400 anzeigen lassen, jedoch sollten kommastellen weiter hochgezählt werden(nicht sichbar).
-
äh 400 oder 401?
Mathematisch korrekt wäre 401 -> dann FloatToStrF() verwenden. Wenn tatsächlich 400 angezeigt werden soll -> AnsiString((int) zahl);
-
Ich lasse eine bestimmte zahl !!!jede sekunde!!! +0.9392472734 hochzählen.
will aber nur die zahl links vom komma anzeigen lassenbitte schreibt mir ein beispiel
-
Nun werd mal nicht pampig...

Wo willst du das denn überhaubt anzeigen???
-
ich werd ned pamping

folgendes programm:
void __fastcall TMain::TimerRohstoffeTimer(TObject *Sender) { // Förderung Eisenerz pro Sekunde. float erz; float forderungerz; forderungerz=StrToFloat(Main->ForderungEisenerz->Caption); erz=StrToFloat(Main->Eisenerz->Caption); forderungerz=forderungerz/3600; // Ausgabe erz=erz+forderungerz; Main->Eisenerz->Caption=FloatToStr(erz); //Hier will ich nach dem Komma abscheiden }
-
Wie schon gesagt (und gezeigt): caste deinen float nach int bzw. weise ihn einem int zu, dabei fallen die Kommastellen automatisch weg.
-
das geht bei größeren zahlen z.b.
float: 5000:3600=1,38
int: 5000:3600=1bei dem beispiel zählt er mir pro sekunde(timer) +1 hinzu.
wenn ich aber folgendes rechne:
float: 500:3600=0,13
int: 500:3600=0zählt er mir +0 hinzu, das will ich nicht. er soll mir +0,13 hinzuzählen aber nicht anzeigen.
-
Rechnen musst du natürlich weiterhin mit den floats, den Integer sollst du nur für die Ausgabe verwenden.
-
// || Förderung Eisenerz pro Sekunde. || int erz; float forderungerz; forderungerz=StrToFloat(Main->ForderungEisenerz->Caption); erz=StrToInt(Main->Eisenerz->Caption); forderungerz=forderungerz/3600; erz=erz+forderungerz; // Ausgabe Main->Eisenerz->Caption=IntToStr(erz);Wenn sie das so meinen
...geht nicht 
-
Grundgütiger...
Liest Du die Postings überhaupt???
Irgendwo viele Postings früher habe ich das schon mal geschrieben:
AnsiString((int) zahl); // auf Dein Beispiel angewendet dann: Main->Eisenerz->Caption=AnsiString((int) erz);Joe_M.
-
danke nochmals, es geht

sorry...aber ich nutze das programm noch nicht sehr lange und konnte damit nichts anfangen