Runden in BCB 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