Avatar billede aagaard93 Novice
03. september 2008 - 21:34 Der er 16 kommentarer

Lommeregner der kan dividere

hey er der noget der kan sige hvordan man får en lommeregner til at kan dividere?

jeg kan godt få den til at plus, minus og gange..
label2.Caption := inttostr(strtoint(edit1.text) * strtoint(edit2.text));

så har jeg prøvet:
label2.Caption := inttostr(strtoint(edit1.text) / strtoint(edit2.text));

men det virker ikke..

er der nogen der ved hvorfor?
Avatar billede arne_v Ekspert
03. september 2008 - 21:39 #1
maaske:

label2.Caption := floattostr(strtoint(edit1.text) / strtoint(edit2.text));
Avatar billede martinlind Nybegynder
03. september 2008 - 22:00 #2
fordi / ikke giver et heltal men en decimal og du prøver at konvertere et heltal til en streng derfor vil arne_v's eks. virke og dit ikke :-)

div er en heltals division :
label2.Caption := inttostr(strtoint(edit1.text) div strtoint(edit2.text));
Avatar billede aagaard93 Novice
03. september 2008 - 22:10 #3
tusind tak for hjælpe :-)..

skulle bare skrive 'div' i stedet for '/'
Avatar billede arne_v Ekspert
03. september 2008 - 22:16 #4
Det er lidt usaedvaneligt med en lommeregner som laver hel tals division.
Avatar billede aagaard93 Novice
03. september 2008 - 22:21 #5
hvordan får man det så til at skrive et punktum (.) for hver tusinde?
nu skriver der 120498295
og jeg vi gerne have den til at skrive: 120.498.295

er der en der ved hvordan man gør det?
Avatar billede arne_v Ekspert
03. september 2008 - 23:05 #6
prøv:

FloatToStrF(120498295, ffNumber, 10, 0)
Avatar billede aagaard93 Novice
03. september 2008 - 23:12 #7
hvor skal det stå?
Avatar billede hrc Mester
04. september 2008 - 08:54 #8
FloatToStrF er en funktion der tager 4 parametre: et tal, en formatteringsmaske og længe og decimaler (vistnok er punktum eller komma inklusiv) og returnerer den færdige streng.

Linjen skal derfor være:

label2.Caption := FloatToStrF(StrToFloat(edit1.Text) / StrToFloat(edit2.Text),ffNumber,10,3);

Afhængig af Delphi-version. Hjælpen efter Delphi 7 er lidt en prøvelse så hjælper det at skrive navnet (FloatToStrF, placere markøren i ordet og trykke F1).
Avatar billede hrc Mester
04. september 2008 - 08:55 #9
Evt kan du bruge StrToFloatDef så du kan fange "tomme" input.
Avatar billede aagaard93 Novice
08. september 2008 - 21:14 #10
kan har denne kode:

label125.caption := inttostr(strtointdef(edit11.text,0) * (2500) div (1000));

men den skriver at resultatet er "2" og ikke "2,5"

nogen der ved hvorfor?

grunden til at jeg ikke bruger float, er at jeg ikke kan lægge alle "labeler" sammen til sidst.
Avatar billede martinlind Nybegynder
08. september 2008 - 21:56 #11
ja div er en HELTALS division, altså uden ,5
Avatar billede hrc Mester
08. september 2008 - 22:18 #12
Div (og mod) er heltalsoperationer mens / og * er beregnet til decimaltal

label125.Caption := FloatToStr(StrToFloatDef(edit11.Text, 0.0) * 2500 / 1000);

Havde det været heltal kunne du i øvrigt have brugt MulDiv

label125.caption := IntToStr(MulDiv(StrToIntDef(edit11.Text,0),2500,1000);

Bemærk i øvrigt hvor læseligt det bliver når man bruger store og små bogstaver. Helt pænt bliver det om man giver sine komponenter fornuftige navne. Synes label125 tyder på en pæn stor form fuld af komponenter man ikke ved hvad skal indeholde.
Avatar billede aagaard93 Novice
08. september 2008 - 22:23 #13
grunen til at jeg ikke bruger float er at jeg kan ikke finde ud af at lægge 2 labels sammen til sidst: fx hvis der står to resultater: 2.000 og 5.000. (bemærk (.)) hvordan lægger man dem sammen så? hvis altså man bruger float???
Avatar billede hrc Mester
09. september 2008 - 09:02 #14
Jeg har ikke testet det, men det burde virke:

procedure TMyCalculator.GetValue(const aInput: string): double
var
  FormatSettings: TFormatSettings;
begin
  FormatSettings := GetFormatSettings; // Hent Windows' indstillinger
  FormatSettings.ThousandSeparator := '.'; // Ret detaljer så de passer til
  FormatSettings.DecimalSeparator := ','; // programmet
  result := StrToFloat(aInput,FormatSettings); // Konvertér
end;
Avatar billede hrc Mester
09. september 2008 - 09:04 #15
var
  Total: double;
begin
  Total := GetValue('2.000') + GetValue('5.000,23');
end;

Du kan ikke have punktum for tusendedelsseparator og decimalseparator på samme tid. Det normale er som ovenstående, at kommaet er decimalseparator.
Avatar billede arne_v Ekspert
28. oktober 2008 - 02:43 #16
Tid at få afsluttet her ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester