|
| Tal og beregninger i Delphi Fra : Skindbeni |
Dato : 20-05-05 23:21 |
|
Kære læsere og brugere af gruppen
Jeg er ret ny bruger af Delphi (og programmering i øvrigt), men har kastet
mig ud i et projekt. Jeg er selvfølgelig begyndt med noget læsestof (Ole
Kristian Mose: Delphi 4,0 og Jørn Sloth: DFelphi Programmering - en
indføring) samt egne mindre forsøg.
Jeg har allerede lavet "programmet" i Excel (hvilket medfører, at det jo
ikke er et program, men blot en skabelon af en slags). Nu vil jeg så forsøge
at få det "lavet" som et rigtigt program.
Mit projekt skal gerne munde ud i et "program" hvor tal og beregninger er en
meget stor / væsentlig del. Dvs. at mit programs funktion er at beregne
nogle input til nogle resultater. Men det giver mig nogle problemer i fbm.
programmeringen. Eller er det bare mig, der synes at tal og beregninger er
lidt vanskelige i et programmeringssprog ctr. i eksempelvis Excel, hvor jeg
er "superbruger" i forhold til her
hvad er den nemmeste måde at få beregnet nogle tal på i Delphi? Er det i
øvrigt lige meget, om det er komma eller hele tal?
Kan man oprette nogle celleformater, således at cellens output automatisk
formateres som fx x,xx (altså med et komme og to decimaler bagefter) eller x
kr. (altså formatet skal skrives som et beløb i kr.)?
Hvis jeg har et Excel ark med en masse tal gemt som et kommasepereret fil
(CVS), kan jeg så få en label eller en beregning til at hente tal derfra?
(det håber jeg, men spørgsmålet er hvordan)
På forhånd tak for de lidt komplicerede spørgsmål.
Michael Sørensen
alias Skindbeni
8700 Horsens
MSN/Mail: ms1(SNABEL-A)skindbeni.dk
| |
Finn Bindeballe (21-05-2005)
| Kommentar Fra : Finn Bindeballe |
Dato : 21-05-05 09:26 |
|
hej...
Delphi er godt til mange ting.... men... det er Excel ogsaa....
du skal nok ikke regne med at det er nemmere at lave tingene i Delhi,
end i Excel, saa din begrundelse skal være en anden... eks holde dine
formler hemlige, hastighed , undgaa bøvl med versioner mm.... men det
har du formegntligt været igennem....
I delphi er det saadan at du SKAL fortælle, hvad type tal du vil arbejde
med. Du har formegntligt stødt paa ord som 'Integer' eller 'Float'.
Integer 's er hele tal, mellem ca. -2mia og + 2mia ogsaa kaldet et 32
bit heltal. Disse tal kan ikke (uden triks) indholde kommatal.
"float" er flydende komma, og som du formegntligt kan regne ud kan disse
indholde kommatal.
her er lidt fra delphi help som fortæller lidt om dynamit omraadet i de
forskellige typper
Type Range Significant digits Size in bytes
Real48 2.9 x 10^-39 .. 1.7 x 10^38 11-12 6
Single 1.5 x 10^-45 .. 3.4 x 10^38 7-8 4
Double 5.0 x 10^-324 .. 1.7 x 10^308 15-16 8
Extended 3.6 x 10^-4951 .. 1.1 x 10^4932 19-20 10
Comp -2^63+1 .. 2^63 -1 19-20 8
Currency -922337203685477.5808.. 922337203685477.5807 19-20
som du kan se er der et stort udvalg, og man skal gøre sig klar hvilke
typer man ønsker at bruge... Hvorfor saa ikke bare bruge Extended ? den
kan jo mest ??? det er et spm om hastighed. den tager noget længere at
regne end en single , og hvis 'kun' du ønsker at gange 2 3 ciffrede tal,
er det jo spild....
du kan godt lægge en 'float' sammen med en int, men resultatet SKAL ende
i en 'float'
mht til at faa vist floats, kan du bruge flg
label1.caption:=format('%6.2f',[stkpris]);
format kan i øvrigt en masse mere - det kan du finde i delphi help
mht CVS er der masser a muligheder, men du skal vide /fortælle lidt mere
om hvad det er du vil ...
mvh Finn
| |
Skindbeni (22-05-2005)
| Kommentar Fra : Skindbeni |
Dato : 22-05-05 00:23 |
|
"Finn Bindeballe" <postmaster@127.0.0.1> skrev i en meddelelse
news:428ef05b$0$78284$157c6196@dreader1.cybercity.dk...
> hej...
Hej Finn og tak for din tid / dit svar.
> Delphi er godt til mange ting.... men... det er Excel ogsaa....
Helt enig. Excel er faktisk et fantastisk program, som kan så meget.
> du skal nok ikke regne med at det er nemmere at lave tingene i Delhi, end
> i Excel, saa din begrundelse skal være en anden... eks holde dine formler
> hemlige, hastighed , undgaa bøvl med versioner mm.... men det har du
> formegntligt været igennem....
Jeg er også enig i ovenstående og det har også været gennem mine
overvejelser. Det er heller ikke mit arbejde, der skal gøres nemmere, men
brugerens. Udover ovenstående, så tror jeg - alt andet lige - at man kan
lave det mere brugervenligt i et program end i en Excel regneark.
Også ud fra en betragtning af, at brugere nemmere kan ødelægge noget i et
Excel ark, uden de egentlig ønsker det, mens man i et stykke program nemmere
kan sikre sig, at alle formler m.v. ligger, som de skal m.v.
> I delphi er det saadan at du SKAL fortælle, hvad type tal du vil arbejde
> med. Du har formegntligt stødt paa ord som 'Integer' eller 'Float'.
Jeg har stødt på de to begreber, men jeg tror, at min askilleshæl har været,
at jeg *skal* fortælle, hvad type jeg arbejder med. Det har glippet for mig,
da jeg i Excel har været vant til, at et tal var et tal.
> Integer 's er hele tal, mellem ca. -2mia og + 2mia ogsaa kaldet et 32 bit
> heltal. Disse tal kan ikke (uden triks) indholde kommatal.
>
> "float" er flydende komma, og som du formegntligt kan regne ud kan disse
> indholde kommatal.
>
> her er lidt fra delphi help som fortæller lidt om dynamit omraadet i de
> forskellige typper
>
> Type Range Significant digits Size in bytes
> Real48 2.9 x 10^-39 .. 1.7 x 10^38 11-12 6
> Single 1.5 x 10^-45 .. 3.4 x 10^38 7-8 4
> Double 5.0 x 10^-324 .. 1.7 x 10^308 15-16 8
> Extended 3.6 x 10^-4951 .. 1.1 x 10^4932 19-20 10
> Comp -2^63+1 .. 2^63 -1 19-20 8
> Currency -922337203685477.5808.. 922337203685477.5807 19-20
> som du kan se er der et stort udvalg, og man skal gøre sig klar hvilke
> typer man ønsker at bruge... Hvorfor saa ikke bare bruge Extended ? den
> kan jo mest ??? det er et spm om hastighed. den tager noget længere at
> regne end en single , og hvis 'kun' du ønsker at gange 2 3 ciffrede tal,
> er det jo spild....
>
> du kan godt lægge en 'float' sammen med en int, men resultatet SKAL ende i
> en 'float'
>
> mht til at faa vist floats, kan du bruge flg
>
> label1.caption:=format('%6.2f',[stkpris]);
Ovenstående virker som noget, som jeg kan bruge... Men kan du ikke lige
uddybe det, da det ikke siger mig så meget (det der står i parentesen). På
forhånd tak.
> format kan i øvrigt en masse mere - det kan du finde i delphi help
> mht CVS er der masser a muligheder, men du skal vide /fortælle lidt mere
> om hvad det er du vil ...
Det jeg vil:
Jeg har et regneark, der er gemt som CVS-fil
Heri er eks. gemt flg. oplysninger:
Kommunenavne, kommunenr., kommuneskat i %, amtsskat i %, kirkeskat i %.
Dels ønsker jeg, at man et sted i programmet, skal kunne vælge sin kommune,
og skattesatserne ud for det valgte kommunenavn skal så slå igennem i mine
udregninger.
Jeg kan bare ikke gennemskue, hvordan det kan laves.
P.S. Jeg har lavet forms og jeg har formlerne for, hvordan man udregner
skatten qua min uddannelse / mit nuværende Excel ark.
P.P.S. Jeg ved godt, at databaser er at foretrække, men som studerende, er
den pris, som Delphi med databaser koster, en stor udgift. Især når der ikke
skal tjenes på programmet.
P.P.P.S. Hvad med procenter... Kan Delphi regne med det, eller skal jeg på
en eller anden måde konvertere, hvis der i en celle ex står 15%
| |
Finn Bindeballe (22-05-2005)
| Kommentar Fra : Finn Bindeballe |
Dato : 22-05-05 10:01 |
|
hej.....
>>label1.caption:=format('%6.2f',[stkpris]);
okay... det der sker her er at du ved at skrive '%6.2f' fortæller
format, at den skal skrive et Floating point tal (der af f) , og at det
skal skrives med op til 6 ciffre i heltals-delen, og 2 decimaler. og at
det er variablen stkpris der skal skrives. procent tegnet bruges til at
fortælle format, at der kommer nolge oplysninger om hvordan man ønsker
teksten formateret.
du kan sagtens skrive mere eks
format('prisen beregnes til at være %2.2f pr stk, og total pris er %4.2f
kr.' ,[stkpris,totalpris]);
hvis du stiller cursoren oven paa format, of trykker F1, vil du komme
frem til en hjælpeside, hvor der staar meget mere om ting og sager
format kan.
> Det jeg vil:
> Jeg har et regneark, der er gemt som CVS-fil
>
> Heri er eks. gemt flg. oplysninger:
> Kommunenavne, kommunenr., kommuneskat i %, amtsskat i %, kirkeskat i %.
okay.. jeg kan forstaa at du IKKE har DB tilrådigheg, saa blir det list
mere bøvlet, men det kan sagtens lade sig gøre...
du kunne jo læse div CVS ind i en Tstringlist, saa har du en string pr
kommune - (jeg gaar ud fra at dine data er som beskrevet ovenfor).
det gør du med .loadfromfile(filnavn); paa din stringlist object.
dvs nu har du en list med stringe, som ser saadan ud.
'odense,1233,21,23,2' right ??
'rudkøbing,32,12,123,4'
nu opretter du endnu en tstringlist, og sætter teksten paa denne
stringlist til ovenstaaende strenge en ad gangen... og saa sætter du
stringlistens delimiter til ',', og laver en .sort.
nu har du en stringlist hvor første element er komunenavn, andet element
er komunenr, osv.
i denne løkke 'add'er du komunenavnet til en combobox. naar du er gennem
din CVS, har du en combobox, som indeholder alle dine komuner, som
brugren kan vælge, og ved at bruge .itemindex, kan du se hvilken komune
brugeren har valgt. naar du ved det, kan du læse de variabler du har
brug for fra CVS.
......... det var en maade at gøre det paa. der er sikkert andre....
mht proctener ,saa maa blir du alltsaa nød til at gøre det manuelt, dvs
gange med procent, og dele med 100 bagefter ..... mem der er ved ogsaa
overkommeligt....
/f
| |
Skindbeni (22-05-2005)
| Kommentar Fra : Skindbeni |
Dato : 22-05-05 23:16 |
|
"Finn Bindeballe" <postmaster@127.0.0.1> skrev i en meddelelse
news:42904a0f$0$67264$157c6196@dreader2.cybercity.dk...
> hej.....
>>>label1.caption:=format('%6.2f',[stkpris]);
kan format ikke anvendes uden brug af variabler (i ovennævnte eksekmpel
"stkpris")? Jeg har forsøgt i flere forsøg at placere min udregningskode
alle steder i ovennævnte, men uden held: Nedenstående kode udregner fint
summen af de 3 labels, men jeg vil gerne have vist tallet i formatet x,xx.
Resultatet bliver fx 26,5 (og vises sådan), men jeg vil gerne have det vist
som 26,50
Form1.label4.caption:= (floattostr(
strtofloat(Form1.Label1.caption) +
strtofloat(Form1.Label2.Caption) +
strtofloat(Form1.Label3.Caption) )
/Michael Sørensen
alias Skindbeni
8700 Horsens
| |
Ove Kjeldgaard (23-05-2005)
| Kommentar Fra : Ove Kjeldgaard |
Dato : 23-05-05 00:27 |
|
"Skindbeni" <ms1@FJERNDETTEskindbeni.dk> wrote:
>Resultatet bliver fx 26,5 (og vises sådan), men jeg vil gerne have det vist
>som 26,50
Det kan gøres med Format funktionen.
Men der er mindst to måder, kig i online hjælpen på "Format function" og "Format
Strings". Man kan sætte min. antal cifre Floating formatet eller bruge Money
formatet som så igen bruger Windows regionale indstillinger.
--
Med venlig hilsen, Ove Kjeldgaard, nospam AT privat DOT dk
Natur og Friluftsliv: < http://hiker.dk>
| |
Finn Bindeballe (23-05-2005)
| Kommentar Fra : Finn Bindeballe |
Dato : 23-05-05 07:20 |
|
hej
label1.caption:=format('%6.2f',[(10+stkpris*0.12)/32]);
/F
| |
Uffe Kousgaard (21-05-2005)
| Kommentar Fra : Uffe Kousgaard |
Dato : 21-05-05 10:01 |
|
"Skindbeni" <ms1@FJERNDETTEskindbeni.dk> wrote in message
news:428e62a1$0$648$ba624c82@nntp02.dk.telia.net...
>
> hvad er den nemmeste måde at få beregnet nogle tal på i Delphi? Er det i
> øvrigt lige meget, om det er komma eller hele tal?
Hvis du er interesseret i at brugeren selv skal kunne indtaste formlerne
(som i excel) for en beregning, så skal du bruge en parser:
http://www.efg2.com/Lab/Library/Delphi/MathFunctions/Parsers.htm
Jeg har tidligere brugt den, der hedder parser10 og den er helt fin.
Ellers skrives formler på samme måde som excel, men blot direkte i
kildekoden.
hilsen
Uffe
| |
Skindbeni (22-05-2005)
| Kommentar Fra : Skindbeni |
Dato : 22-05-05 00:30 |
|
"Uffe Kousgaard" <oh@no.no> skrev i en meddelelse
news:428ef8e0$0$175$edfadb0f@dtext01.news.tele.dk...
> "Skindbeni" <ms1@FJERNDETTEskindbeni.dk> wrote in message
> news:428e62a1$0$648$ba624c82@nntp02.dk.telia.net...
Hej Uffe, også tak til dig og din tid / dit svar.
>> hvad er den nemmeste måde at få beregnet nogle tal på i Delphi? Er det i
>> øvrigt lige meget, om det er komma eller hele tal?
>
> Hvis du er interesseret i at brugeren selv skal kunne indtaste formlerne
> (som i excel) for en beregning, så skal du bruge en parser:
> http://www.efg2.com/Lab/Library/Delphi/MathFunctions/Parsers.htm
>
> Jeg har tidligere brugt den, der hedder parser10 og den er helt fin.
Jeg har kigget lidt på dit link og downloadet parser10, men kan jeg ikke få
dig til at give en lille dansk forklaring? På forhånd tak.
> Ellers skrives formler på samme måde som excel, men blot direkte i
> kildekoden.
Vil det nemmeste / bedste ikke være at lave div. procedurer med beregninger,
som jeg kan henvise til (Er det det, som du mener?)
Jeg har bare haft problemer med ex.at få en label og en edit boks lagt
sammen eller at få procenter lagt sammen
Et tillægsspørgsmål. Hvis man beregner beløb. Vil det så være mest
hensigtsmæssigt at have en label til tallet efterfulgt af en særskilt label
med teksten "kr." ?
| |
Uffe Kousgaard (22-05-2005)
| Kommentar Fra : Uffe Kousgaard |
Dato : 22-05-05 10:20 |
|
"Skindbeni" <ms1@FJERNDETTEskindbeni.dk> wrote in message
news:428fc473$0$674$ba624c82@nntp04.dk.telia.net...
>
> Jeg har kigget lidt på dit link og downloadet parser10, men kan jeg ikke
> få dig til at give en lille dansk forklaring? På forhånd tak.
Spørgsmålet er om brugeren skal have mulighed for at indtaste egne formler
eller kun ændre på variable i formler defineret af dig?
Hvis det sidste er tilfældet, skal du bruge en parser, ellers ikke.
>
> Jeg har bare haft problemer med ex.at få en label og en edit boks lagt
> sammen eller at få procenter lagt sammen
Her er et eksempel, som viser det med heltal:
label1.caption:= inttostr( strtoint(label2.caption) +
strtoint(edit1.text) );
> Et tillægsspørgsmål. Hvis man beregner beløb. Vil det så være mest
> hensigtsmæssigt at have en label til tallet efterfulgt af en særskilt
> label med teksten "kr." ?
Det er vist underordnet med mindre du har tænkt dig at læse værdien fra
label'en senere (som ovenfor). Så vil det være klart nemmest at have tal og
tekst adskilt.
hilsen
Uffe
| |
Uffe Kousgaard (22-05-2005)
| Kommentar Fra : Uffe Kousgaard |
Dato : 22-05-05 10:57 |
|
>
> Hvis det sidste er tilfældet, skal du bruge en parser, ellers ikke.
Ups, omvendt !
| |
ms1@skindbeni.dk (23-05-2005)
| Kommentar Fra : ms1@skindbeni.dk |
Dato : 23-05-05 12:04 |
|
Finn Bindeballe wrote:
> hej
>
> label1.caption:=format('%6.2f',[(10+stkpris*0.12)/32]);
>
> /F
Hej igen Finn... Det er jo snart ved at blive dagligdag, at jeg
spørger dig, men jeg skal nok lade være med at gøre det til en vane
jeg har selvfølgelig kigget i Borlands online hjælp omkring "format",
som både du og Ove henviste til, samt prøvet med en masse praktiske
forsøg. Dog stadig uden held, hvorfor jeg igen lige spørger ind til
mit problem.
Nogle gange med en fejl under selve compileringen, men andre gange
først, når jeg åbner den form, hvorpå beregningen sker.
Fejlmeddelelsen på sidstnævnte kan ses her:
http://www.skindbeni.dk/ex/fejl.jpg
ligesom man kan se, at jeg for nemhedens skyld kun har ønsket, at
summen af 1+1 skal findes - dog med formatering.
Men det er den samme fejlmeddelelse, som jeg får, når jeg forsøger
at lægge to eller flere labels sammen.
Jeg går i øvrigt ud fra, at du med dit eksempel
label1.caption:=format('%6.2f',[(10+stkpris*0.12)/32]);
mener, at man mellem de to firkantede parenteser kan skrive såvel
konstanter, formler som variabler (idet du stadig skriver stk. pris
anser jeg det, som blot et eksempel)
| |
Finn Bindeballe (23-05-2005)
| Kommentar Fra : Finn Bindeballe |
Dato : 23-05-05 13:29 |
|
hej ....
fordi du skriver [1+1] ... som jo i princippet er 2 heltal ( integer) ...
Dette virker V Integer
label1.caption:=format('%6.2d',[1+1]);
bemærk formaterings strengen..... med d istedet for f
jeg har lige for en go ordens skyld lavet - og afprøvet flg...
///////////////////////////////////////////////////////////////////////////////////
procedure TForm3.Button7Click(Sender: TObject);
var stkpris:single;
begin
stkpris:=333.421;
label1.caption:=format('%6.2f',[(10+stkpris*543.12)/32]);
end;
//////////////////////////////////////////////////////////////////////////////
resultalte skal gi 5659,30
| |
Skindbeni (27-05-2005)
| Kommentar Fra : Skindbeni |
Dato : 27-05-05 20:16 |
|
Hej igen.
Jeg har igen fået problemer med en udregning i Delphi... Hmm... Nu gik det
ellers lige så godt
Forenklet eksempel:
Jeg har 3 editbokse (EdtTal1, EdtTal2 og EdtResultat)
I EdtTal1 og EdtTal2 skal man kunne indtaste tal (heltal). I EdtResultat
skal resultatet af følgende vises: (EdtTal1 + EdtTal2) * 0,28. Men jeg får
fejl.
Jeg har forsøgt med 3 metoder (bare for selv at forsøge først), uden at have
kunnet knække nøden.
1)
Begin
edtResultat.text:=format('%6.0f',[(StrToFloat(edtTal1.text)+StrToFloat(edtTal2.text))*0.28]);
End;
2)
Begin
edtResultat.Text:=FloatToStr((StrToFloat(edtTal1.text)+(StrToFloat(edtTal2.text)))*0.28);
End;
3)
Var
a:integer;
Begin
a:=(StrToFloat(edttal1.text)+StrToFloat(edtTal2.text))*0.28;
edtResultat.text:=FloatToStr(a);
End;
| |
Michael Haase (28-05-2005)
| Kommentar Fra : Michael Haase |
Dato : 28-05-05 15:42 |
|
Skindbeni skrev:
>
> 1)
> Begin
> edtResultat.text:=format('%6.0f',[(StrToFloat(edtTal1.text)+StrToFloat(edtTal2.text))*0.28]);
> End;
Burde ikke give problemer
>
> 2)
> Begin
> edtResultat.Text:=FloatToStr((StrToFloat(edtTal1.text)+(StrToFloat(edtTal2.text)))*0.28);
> End;
>
Burde heller ikke give problemer
> 3)
> Var
> a:integer;
> Begin
> a:=(StrToFloat(edttal1.text)+StrToFloat(edtTal2.text))*0.28;
> edtResultat.text:=FloatToStr(a);
> End;
>
Her er problemet at beregningen af a giver et reelt tal, men du siger at
a skal være et heltal. Hvis du istedet skriver:
var a : real;
skulle det variant også gerne virke.
Hilsen
Michael
| |
Skindbeni (30-05-2005)
| Kommentar Fra : Skindbeni |
Dato : 30-05-05 10:28 |
|
Michael Haase <micvans@netscape.invalid> wrote in message news:<48180$4298832a$3e3d8433$17407@news.arrownet.dk>...
> Skindbeni skrev:
>
> >
> > 1)
> > Begin
> > edtResultat.text:=format('%6.0f',[(StrToFloat(edtTal1.text)+StrToFloat(edtTal2.text))*0.28]);
> > End;
>
> Burde ikke give problemer
> >
> > 2)
> > Begin
> > edtResultat.Text:=FloatToStr((StrToFloat(edtTal1.text)+(StrToFloat(edtTal2.text)))*0.28);
> > End;
> >
> Burde heller ikke give problemer
>
>
> > 3)
> > Var
> > a:integer;
> > Begin
> > a:=(StrToFloat(edttal1.text)+StrToFloat(edtTal2.text))*0.28;
> > edtResultat.text:=FloatToStr(a);
> > End;
> >
>
> Her er problemet at beregningen af a giver et reelt tal, men du siger at
> a skal være et heltal. Hvis du istedet skriver:
Jeg har som sagt forsøgt med ovenstående eksempler, men de giver en
fejlmeddelelse. Ikke ved compileringen, men så snart jeg skriver et
tal - UANSET HVILKET - så dukker fejlen op, med nedbrydning af
programmet til følge.
Se her: www.skindbeni.dk/ex/fejl2.jpg
| |
Skindbeni (30-05-2005)
| Kommentar Fra : Skindbeni |
Dato : 30-05-05 11:13 |
|
Michael Haase <micvans@netscape.invalid> wrote in message news:<48180$4298832a$3e3d8433$17407@news.arrownet.dk>...
> Skindbeni skrev:
>
> >
> > 1)
> > Begin
> > edtResultat.text:=format('%6.0f',[(StrToFloat(edtTal1.text)+StrToFloat(edtTal2.text))*0.28]);
> > End;
>
> Burde ikke give problemer
> >
> > 2)
> > Begin
> > edtResultat.Text:=FloatToStr((StrToFloat(edtTal1.text)+(StrToFloat(edtTal2.text)))*0.28);
> > End;
> >
> Burde heller ikke give problemer
>
>
> > 3)
> > Var
> > a:integer;
> > Begin
> > a:=(StrToFloat(edttal1.text)+StrToFloat(edtTal2.text))*0.28;
> > edtResultat.text:=FloatToStr(a);
> > End;
> >
>
> Her er problemet at beregningen af a giver et reelt tal, men du siger at
> a skal være et heltal. Hvis du istedet skriver:
>
> var a : real;
>
> skulle det variant også gerne virke.
>
> Hilsen
> Michael
Hej igen.
Jeg har som tidligere skrevet forsøgt med de 3 ovennævnte metoder, men
alle 3 giver en fejlmeddelelse.
Ikke ved kompileringen, men når jeg åbner den pågældende form og
indtaster et tal - UANSET, HVAD DET ER FOR ET TAL - hvorefter
programmet giver en fejlmeddelelse og bryder ned.
Fejlmeddelelsen kan ses her:
www.skindbeni.dk/ex/fejl2.jpg
/Michael Sørensen
alias Skindbeni
8700 Horsens
| |
Finn Bindeballe (30-05-2005)
| Kommentar Fra : Finn Bindeballe |
Dato : 30-05-05 11:43 |
|
hej...
det er formegntligt fordi du skriver komma forkert ... prov med punktum
istedet for ....
/F
| |
Skindbeni (30-05-2005)
| Kommentar Fra : Skindbeni |
Dato : 30-05-05 14:02 |
|
"Finn Bindeballe" <postmaster@127.0.0.1> skrev i en meddelelse
news:429aee44$0$201$edfadb0f@dread11.news.tele.dk...
> hej...
>
> det er formegntligt fordi du skriver komma forkert ... prov med punktum
> istedet for ....
Hej Finn.
Desværre.
Jeg har skrevet med . (punktum) i stedet for komma. Ellers kunne jeg slet
ikke få selve kompileringen til at godkende det.
| |
Finn Bindeballe (30-05-2005)
| Kommentar Fra : Finn Bindeballe |
Dato : 30-05-05 14:22 |
|
hej...
ud fra det billede, hu henviser til , er det ikke en kompileringsfejl,
men en runtime fejl....
prov ilge at vis det kode der gar galt....
/F
| |
Skindbeni (30-05-2005)
| Kommentar Fra : Skindbeni |
Dato : 30-05-05 14:57 |
|
"Finn Bindeballe" <postmaster@127.0.0.1> skrev i en meddelelse
news:429b1394$0$224$edfadb0f@dread11.news.tele.dk...
> hej...
>
> ud fra det billede, hu henviser til , er det ikke en kompileringsfejl, men
> en runtime fejl....
>
> prov ilge at vis det kode der gar galt....
Hej igen.
Ja, det er selvfølgelig runtime fejl. Var bare lige blank over for, hvad det
nu lige hed
Jeg går ud fra, at det er nedenstående, det går galt ved, idet fejlen
opstår, når denne kode bliver indsat
Procedure AcontoUdbytteSkat1;
Begin
FormAktieindkomst.edtAcUdbytteSkat1.Text:=FloatToStr((StrToFloat(FormAktieIndkomst.edtAktieIndkomst1.text)+(StrToFloat(FormAktieIndkomst.edtAndenAktieIndkomst1.text)))*0.28);
End;
Håber, at det er nok hjælp / uddybelse, ellers må du jo lige give lyd igen
Jeg havde desuden også forsøgt med 2 andre udregningsmetoder, som alle gav
samme runtime fejl.
Problemet opstår ikke kun, når jeg indtaster et kommatal, men uanset hvad
jeg indtaster, idet indtastning af eksempelvis 1 (et et-tal) også giver
fejl, så snart 1 trykkes ned på tastaturet.
/Michael Sørensen
alias Skindbeni
| |
Finn Bindeballe (30-05-2005)
| Kommentar Fra : Finn Bindeballe |
Dato : 30-05-05 16:00 |
|
hep...
ja men du gør heller ikke det du tror...
prøv at gøre saadan
--------------------------------------------------------------------------------
procedure xx
var tal1,tal2:single;
begin
tal1:=StrToFloat(FormAktieIndkomst.edtAktieIndkomst1.text);
tal2:=StrToFloat(FormAktieIndkomst.edtAndenAktieIndkomst1.text);
FormAktieindkomst.edtAcUdbytteSkat1.Text:=
FloatToStr((tal1+tal2)*0.28);
end;
--------------------------------------------------------------------------------
jeg vil tro det er dette du vil.... men det er ikke det du gør.....
det er en go ide ,at skrive tingene op saa de blir lidt mere overskulige
ligesom ovenfor, og - hvis man har lydt, kan man altid 'nørde' tingene
sammen igen......
/F
| |
Skindbeni (31-05-2005)
| Kommentar Fra : Skindbeni |
Dato : 31-05-05 22:32 |
|
"Finn Bindeballe" <postmaster@127.0.0.1> skrev i en meddelelse
news:429b2a38$0$67259$157c6196@dreader2.cybercity.dk...
> hep...
>
> ja men du gør heller ikke det du tror...
>
> prøv at gøre saadan
> --------------------------------------------------------------------------------
> procedure xx
> var tal1,tal2:single;
> begin
> tal1:=StrToFloat(FormAktieIndkomst.edtAktieIndkomst1.text);
> tal2:=StrToFloat(FormAktieIndkomst.edtAndenAktieIndkomst1.text);
>
> FormAktieindkomst.edtAcUdbytteSkat1.Text:=
> FloatToStr((tal1+tal2)*0.28);
> end;
> --------------------------------------------------------------------------------
>
> jeg vil tro det er dette du vil.... men det er ikke det du gør.....
>
> det er en go ide ,at skrive tingene op saa de blir lidt mere overskulige
> ligesom ovenfor, og - hvis man har lydt, kan man altid 'nørde' tingene
> sammen igen......
Jeg har skrevet ovenstående direkte ind, men samme fejl som tidligere dukker
stadig op.
Se nyt screendump www.skindbeni.dk/ex/fejl3.jpg , hvor man såvel kan se
fejlmeddelelsen omkring runtime fejlen samt selve koden, der giver
problemet, når den står i Delphis kodevindue.
Jeg kan forresten ikke se, hvad forskellen er på din kodetekst og den, som
jeg selv har lavet tidligere (de giver også samme fejlmeddelelse).
Lige for at undgå misforståelser, men ovenstående er ikke ment som negativ
kritik eller mangel på taknemmelighed for hjælpen, og jeg erkender blankt,
at jeg er total nybegynder i forhold til dig - hvilket i bund og grund nok
også er baggrunden for mine problemer
| |
Lars HT (31-05-2005)
| Kommentar Fra : Lars HT |
Dato : 31-05-05 23:02 |
|
"Skindbeni" <ms1@FJERNDETTEskindbeni.dk> wrote in message
news:429cd790$0$628$ba624c82@nntp02.dk.telia.net...
>
> Jeg har skrevet ovenstående direkte ind, men samme fejl som tidligere
> dukker stadig op.
>
Altså fejlen opstår jo, fordi du prøver at omdanne "" =ingenting til et
real-tal. Det er temmelig sikkert fordi der ingenting står i en af
edit-boksene på det tidspunkt, hvor konverteringen skal ske!
Opstår fejlen ved, at du trykker på en knap eller lign? eller
opstår fejlen, når du fra delphi vil kompilere og køre programmet?
Sidstnævnte vil give en fejl, hvis proceduren af en eller anden grund køres
via en form.create form.activate eller lignende.
Prøv at skrive to værdier i editboksene - design-time - så vil fejlen
sikkert ikke opstå!
Lars
| |
Skindbeni (01-06-2005)
| Kommentar Fra : Skindbeni |
Dato : 01-06-05 17:42 |
|
"Lars HT" <aslaktoke@yahoo.danmark> skrev i en meddelelse
news:429cdec3$0$26117$ba624c82@nntp05.dk.telia.net...
>
> "Skindbeni" <ms1@FJERNDETTEskindbeni.dk> wrote in message
> news:429cd790$0$628$ba624c82@nntp02.dk.telia.net...
>>
>> Jeg har skrevet ovenstående direkte ind, men samme fejl som tidligere
>> dukker stadig op.
>>
> Altså fejlen opstår jo, fordi du prøver at omdanne "" =ingenting til et
> real-tal. Det er temmelig sikkert fordi der ingenting står i en af
> edit-boksene på det tidspunkt, hvor konverteringen skal ske!
Du har helt ret. Det havde jeg ikke selv tænkt på. Men ja, det er det, der
er problemet...
> Opstår fejlen ved, at du trykker på en knap eller lign? Fejlen opstår i
> runtime, men ikke ved en (on)click o.l. men derimod ved de to editbokses
> OnChange event. Altså således at den 3. editboks automatisk beregner, når
> et af de to andre felter ændres
> eller opstår fejlen, når du fra delphi vil kompilere og køre programmet?
Nej, der er ingen fejl. Kun føromtalte runtime fejl.
> Sidstnævnte vil give en fejl, hvis proceduren af en eller anden grund
> køres via en form.create form.activate eller lignende.
>
> Prøv at skrive to værdier i editboksene - design-time - så vil fejlen
> sikkert ikke opstå!
Det hjalp, så både mine egne samt Finns løsning fungerer.
Men hvis en bruger nu sletter værdien, så er det igen ged i den.
Ud fra din og Finns indlæg har jeg selv fundet frem til en løsning, der
tager højde for det.
I stedet for StrToFloat bruger jeg StrToFloatDef
Men tak til jer begge for hjælp til min løsning.
/Michael Sørensen
alias Skindbeni
| |
Finn Bindeballe (02-06-2005)
| Kommentar Fra : Finn Bindeballe |
Dato : 02-06-05 07:32 |
|
hej....
du bør nok overveje at pakke hele din beregning ind i en try-except
struktur... for , hvad sker der hvis du dividere med 0 ????
/F
| |
roberth+news@ifi.uio~ (30-05-2005)
| Kommentar Fra : roberth+news@ifi.uio~ |
Dato : 30-05-05 14:23 |
|
Skindbeni <ms1@fjerndetteskindbeni.dk> wrote:
| "Finn Bindeballe" <postmaster@127.0.0.1> skrev i en meddelelse
| news:429aee44$0$201$edfadb0f@dread11.news.tele.dk...
| > hej...
| >
| > det er formegntligt fordi du skriver komma forkert ... prov med punktum
| > istedet for ....
|
| Hej Finn.
|
| Desv?rre.
|
| Jeg har skrevet med . (punktum) i stedet for komma. Ellers kunne jeg slet
| ikke f? selve kompileringen til at godkende det.
Lurer på om ikke Finn tenkte på hva du gjør i brukergrensesnittet under
kjøring.
En annen ting: Å bruke flyttall til å behandle penger vil lett føre til
avrundingsfeil. Det er vel som regel mer fornuft i å bruke en
tilstrekkelig stor heltallstype og regne med øre, eller å lage en klasse
som bruker to heltall.
--
Robert Bauck Hamar
| |
|
|