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
    Carl

    Was 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 Zahl

    include <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 lassen

    bitte 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=1

    bei dem beispiel zählt er mir pro sekunde(timer) +1 hinzu.

    wenn ich aber folgendes rechne:

    float: 500:3600=0,13
    int: 500:3600=0

    zä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 😞


Anmelden zum Antworten