Kommazahlen im StringGrid? (war: StringGrid)



  • Es geht ja nicht drum wie elegant es ist. Bin dir auf jeden Fall total dankbar. Allerdings hab ich jetzt noch das Problem, wie ich Nachkommastelle und das davor ermittel!
    Nachkomma vielleicht so?

    double nachkomma = FloatToStr(zuwend_h).Pos(",");
    


  • int iVor = StrToInt(FloatToStr(f).SubString(1, FloatToStr(f).Pos(',') - 1));
    ShowMessage(iVor);
    int iNach = StrToInt(FloatToStr(f).SubString(FloatToStr(f).Pos(',') + 1, FloatToStr(f).Length()));
    ShowMessage(iNach);
    

    Probiere es damit aus. (ungetestet)
    xy



  • if(int(f)-f) ShowMessage("ja");
    else ShowMessage("nein");
    

    Dein Beispiel: 13,2
    die 13 nehmen und verteilen. Dann die 0,2 zu irgendeinem Tag addieren.

    Die Verteilung der Gesamtstunden ist so allerdings ziemlich unausgewogen.(Jeweils immer nur an einem Tag wird ne angebrochene Stunde dazugezählt.)
    Zähl doch einfach in kleinerern Schritten 0,1 (nicht Integer)

    float *verteilung = new float[tage];
    
    verteilung[random(tage)]+=.1;
    


  • und nicht vergessen.

    zuwend_h*10
    


  • Sonnenschein84 schrieb:

    Allerdings hab ich jetzt noch das Problem, wie ich Nachkommastelle und das davor ermittel!

    Hab gegoogelt und folgendes gefunden:

    int integer = int(f); //Vorkommazahl
      ShowMessage(integer);
      float decimal = f - int(f); //Nachkommazahl (mit 0,)
      ShowMessage(decimal);
    

    Sieht klasse aus. Und das von franko ist auch Klasse! (zum Prüfen, ob eine Zahl Nachkommazahl hat oder nicht)

    franko schrieb:

    if(int(f)-f) ShowMessage("ja");
    else ShowMessage("nein");
    

    Ich hoffe, Du kannst damit was anfangen.
    xy



  • Ihr seit ganz klasse. Ich bin euch total dankbar. Ich bin total im Streß und soll das jetzt fix runter programmieren bzw. eben nur das Problem da heraus nehmen. Ich füge das dann morgen ein. Falls ich noch ein Problem habe, wäre ich froh wenn ich auf euch zurück greifen könnte. Ich möchte euch aber nochmal ganz sehr danken. Ihr habt mir echt geholfen!



  • wie bekomme ich aus der Kommazahl, eine Zahl die nach dem Komma nur 2 Stellen hat?



  • neu = ((int) (alt * 100)) / 100;
    

    oder
    VCL-Referenz zu RoundTo



  • funktioniert irgendwie nicht wirklich!



  • Sehr präzise Beschreibung.
    Was funktioniert nicht?



  • Dasd schrieb:

    neu = ((int) (alt * 100)) / 100;
    

    oder
    VCL-Referenz zu RoundTo

    Damit bekommt man die Vorkommazahl: 13,12345 -> 13
    Und RoundTo ist in meiner BCB-Hilfe nicht zu finden (?)

    Sonnenschein84 schrieb:

    wie bekomme ich aus der Kommazahl, eine Zahl die nach dem Komma nur 2 Stellen hat?

    Die hier gefundene Funktion tut es für Dich:

    double Round(double Zahl, int Stellen)
    {
        return floor(Zahl * pow( 10, Stellen) + 0.5) * pow(10, -Stellen);
    }
    

    Und

    #include <math.h>
    

    nicht vergessen.
    xy



  • @xy danke dir, aber ich hatte es bereits so gelöst:

    AnsiString neu= FormatFloat("0.0",verteilung[tag++]);
                StringGrid1->Cells[i+1][2] = neu;
    

    das ging auch!



  • xy schrieb:

    Damit bekommt man die Vorkommazahl: 13,12345 -> 13
    Und RoundTo ist in meiner BCB-Hilfe nicht zu finden (?)

    Falsch:

    13,12345 * 100 = 1312,345 -> int -> 1312 / 100 = 13,12.
    Hat schon im klassischen C funktioniert.

    Und RoundTo gibt's in der VCL-Referenz.



  • Ist ja nun gelöst das Problem! Ich hab das mit dem RoundTo bei mir auch nicht gefunden!



  • Dasd schrieb:

    float alt=13.123456;
      float neu = ((int) (alt * 100)) / 100;
      ShowMessage(neu);
    

    Hast Du es denn in BCB ausprobiert?



  • Ok, hast Recht:

    float neu = (float) ((int) (alt * 100)) / 100;
    

    Hatte nicht bedacht, dass in C++ der /-Operator automatisch castet wenn's sein muss.


Anmelden zum Antworten