Gleitkommadivision durch Null



  • So Jungs... folgendes:

    Ich möchte x teilen durch y.
    In einer Switch-Anweisung muss der Ausdruck aber ganzzahlig sein.
    Deshalb musste ich ein "int" davor setzen.

    Wenn x=1,53 ist und y=3 z.b. dann funzt das.
    Wenn aber x=0,8 ist dann funzt es nicht.

    Jetzt erstmal mein Quellcode
    ----------
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
    int DT,MT,YT,DB,MB,YB,age,a; // für das Datum
    double kg, cm, kof; // für die Körperoberfläche
    long double expa, expb; // für den Exponenten der Körperoberfläce
    double skmmol,gfrjskmmol; // für die GFR nach Jelliffe bei mmol/l
    double gfrcskmmol; // für die GFR nach Cockroft bei mmol/l
    double skmg,gfrjskmg; // für die GFR nach Jelliffe bei mg/dl
    double gfrcskmg; // für die GFR nach Cockroft bei mg/dl
    int ende;

    DT=Edit1->Text.ToInt();
    MT=Edit2->Text.ToInt();
    YT=Edit3->Text.ToInt();
    DB=Edit4->Text.ToInt();
    MB=Edit5->Text.ToInt();
    YB=Edit6->Text.ToInt();
    kg=Edit8->Text.ToDouble();
    cm=Edit9->Text.ToDouble();
    skmmol=Edit12->Text.ToDouble();
    skmg=Edit11->Text.ToDouble();

    expa=0.725;
    expb=0.425;

    switch(DT) {case 29: switch(MT) {case 2: DT=1,MT=3;}} //Schaltjahr umgehen
    switch(DB) {case 29: switch(MB) {case 2: DB=1,MB=3;}} //Schaltjahr umgeheb

    age=YT-YB; //Alter ausrechnen

    if(MT-MB<0) {age=age-1;} //Alter ausrechnen

    a = MT-MB; //Alter ausrechnen
    switch(a) {case 0: if(DT-DB<0) {age = age - 1;}} //Alter ausrechnen

    Edit7->Text=age;
    if (age<18)
    {
    ShowMessage("Dieses Alter entspricht nicht dem Einschlusskriterium");
    }

    kof=0.007184*powl(cm, expa)*powl(kg, expb); //Körperoberfläche ausrechnen
    Edit10->Text=kof;

    // Beginn der Berechnung der GFR

    if(double(skmmol)!=0 & double(skmg)!=0)
    {ShowMessage("Bitte geben Sie ENTWEDER mg/dl ODER mmol/l an!"), gfrcskmmol=0, gfrcskmg=0, ende=1;}

    switch(int(skmmol))
    {case 0:
    if(ende!=1)
    {
    gfrcskmg=0.85*((140-age)*kg)/(72*skmg), gfrcskmmol=0;
    }
    if (gfrcskmg<40)
    {
    Form2->Show();
    }
    }

    switch(int(skmg)) ------> Ohne INT funzt es nicht <---------
    {case 0:
    if(ende!=1)
    {
    gfrcskmmol=(((140-age)*kg)/(72*skmmol*0.0113))*0.85, gfrcskmg = 0;
    }
    if (gfrcskmmol<40)
    {
    Form2->Show();
    }
    }
    Edit14->Text=gfrcskmg;
    Edit16->Text=gfrcskmmol;
    ---------------------------------------
    Ich hoffe mein Quelltext, verwirrt euch nicht zu sehr.
    Ich will nur die Variable "skmg" als z.b. 0,053 schreiben können um eine Berechnung im 0,"irgendwas"-Bereich zu starten.
    Wer kann mir hier helfen?



  • nimm mal . statt ,
    Also 0.053



  • um dein problem geschickt zu umgehen, kansnt du die switch anwesiung streichen und stattdessen ne reihe von else if machen! dann kansnte diene doubles behalten.

    switch (x)
    {
       case 0:
    ...
       case 1:
    ...
       case 2:
    ...
    }
    

    machst du zu:

    if (x==0.0)
    ...
    else if (x==1.0)
    ...
    else if (x==1.0)
    ...
    


  • Vielen Dank...

    Aber auf das einfachste kommt man meist nie....

    Aber ich habe es noch ne Idee einfacher gefunden.

    Und zwar:

    if (skmg<0)
    {
    skmg=skmg*10;
    }

    Und in der Formel selber nachher noch mal durch 10 geteilt.

    Danke nochmal... 🙂



  • skmg<1 meinte ich .... sorry


Anmelden zum Antworten