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 umgehebage=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 ausrechnenEdit7->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