Avatar billede fun22 Nybegynder
28. juli 2003 - 15:30 Der er 20 kommentarer og
1 løsning

Dividere en string??

Hej

Jeg har en string som indeholder tal, men hvordan dividere jeg det med 1000????

Kan man ikke lave noget ala. string := talstring/1000; ??
Avatar billede nmh Nybegynder
28. juli 2003 - 15:31 #1
Desværre kender jeg ikke Delphi ret godt, men det du skal gøre er at konvertere strengen til tal. Det er jeg sikker på, der findes en ordre til.
Avatar billede henrik13 Nybegynder
28. juli 2003 - 15:32 #2
=*0,0001
Avatar billede nmh Nybegynder
28. juli 2003 - 15:35 #3
Henrik-->Mon ikke du mener, at det at dividere med 1000 er det samme som at gange med 0,001?
Og så er problemet jo stadig at få tekststrengen konverteret til tal.
Avatar billede jpvj Nybegynder
28. juli 2003 - 15:35 #4
String st = "1000";
Long res = ord(string) / 1000;
Long err;
Str(st, res, err);
Avatar billede fun22 Nybegynder
28. juli 2003 - 15:39 #5
Jeg kan ikk efå noget af det til at virke. Det er fordi jeg er ved at lave en mp3 afspiller og det komponent jeg bruger giver plaseringen ii frames, og så vil jeg jo lave den om til minutter.

MpegPlayer1.CurrentPosition
Avatar billede benoit Nybegynder
28. juli 2003 - 15:42 #6
var
r: extended;
begin
r:=strtofloat(string);
r:=r/1000;
end;

strtofloat konvertere først til et reelt tal (real/extended kaldes float), siden divideres det.
du kan også gå den anden vej: floattostr(r);
Avatar billede nmh Nybegynder
28. juli 2003 - 15:43 #7
Tager det da 1/1000 sek
Avatar billede jpvj Nybegynder
28. juli 2003 - 15:44 #8
Brug ebnoits svar - jeg er meget rusten i Pascal/Delphi kode pt...
Avatar billede nmh Nybegynder
28. juli 2003 - 15:46 #9
for 1 frame?
Skal du så lave tiden i sek om til tiden i minutter?
Så skal du dividere med 60 yderliger.
Du skal i øvrigt benytte benoit's metode. Det er nødvendigt at arbejde med flydende tal.
Avatar billede fun22 Nybegynder
28. juli 2003 - 15:51 #10
benoit >> Så får jeg følgende fejl:

incompatible string and interger
Avatar billede dkn Nybegynder
28. juli 2003 - 15:57 #11
var
st:string;
begin
st:= 2000.6;

showmessage(floattostr(strtofloat(st) / 1000));
Avatar billede benoit Nybegynder
28. juli 2003 - 15:58 #12
var
  str: string;
  r: extended;
begin
  str:=987; // din oprindelige streng.
  r:=strtofloat(str);
  r:=r/1000;
  str:=floattostr(r); // føres tilbage til str.
end;

Jeg skal se lidt kode før jeg kan gøre mere, tror jeg.

:-)

Håber det hjælper.
Avatar billede benoit Nybegynder
28. juli 2003 - 15:59 #13
DKN har fat i noget der: så kan du se hvad der sker.
Avatar billede fun22 Nybegynder
28. juli 2003 - 16:00 #14
dkn>>

Kan du ikke uddybe???
Avatar billede nmh Nybegynder
28. juli 2003 - 16:05 #15
Nu bliver jeg nysgerrig: I Delphi kan man altså godt skrive s=123, når s er erklæret som en streng og ikke s="123".
Det er sådan noget, der er med til at øge mængden af fejl.
Avatar billede fun22 Nybegynder
28. juli 2003 - 16:05 #16
Når jeg sætter det ind sådan her, kommer den med incobatible string fejlen.
  str:=MPegPlayer1.CurrentPosition; // din oprindelige streng.
  r:=strtofloat(str);
  r:=r/1000;
  str:=floattostr(r); // føres tilbage til str.
Avatar billede dkn Nybegynder
28. juli 2003 - 16:09 #17
hm jo, men det var jo bare et eksempel.

Det går jo bare ud på at forstå konventering mellem typer.

showmessage(floattostr(strtofloat('5000') / 1000));

altså strtofloat('5000') laver 5000 som er en string, om til typen real.
frem for en integer ved du jo nok at real kan holde decimal tal.
Når de 5000 er lavet til typen real kan du dividere med det du nu vil.
For at vise resultatet laver jeg det tilbage til en string vedhjælp af floattostr()

:)
Avatar billede dkn Nybegynder
28. juli 2003 - 16:13 #18
men det du vil kan gøres sådan:

function MilliSecondsToString(MilliSeconds: integer): string;
var i1, i2: integer;
begin
i1:=(MilliSeconds div 1000) div 60;
i2:=(MilliSeconds div 1000)-(i1*60);
Result:=FormatFloat('00',i1)+':'+FormatFloat('00',i2);
end;

Label1.caption := (MilliSecondsToString(MediaPlayer1.Length)+' - '+(MilliSecondsToString(MediaPlayer1.Position)));
Avatar billede benoit Nybegynder
28. juli 2003 - 17:20 #19
STR er af typen string.
  Derfor duer dette sikkert ikke:
  str:=MPegPlayer1.CurrentPosition; // din oprindelige streng.
 
men hvis du skriver:

mPegPlayer1.Currentposition:=mPegPlayer1.Currentposition div 1000;

Så laver den en heltals division (den dividere så meget gange den kan, og smider resten ud, så der ikke er et kommatal). Det bør den kunne klare.
Det andet jeg viste var en er en typecasting funktion. Og den kan du bruge i mange andre funktion. Prøv at skriv inttostr og så trykke F1. Så får du en oversigt over de muligheder der er.

Bedre?
:-)
Avatar billede athlon-pascal Juniormester
28. juli 2003 - 17:45 #20
MPegPlayer1.CurrentPosition lyder, som det er blevet nævnt, som en Integer.
Prøv dette:
  str := IntToStr(MPegPlayer1.CurrentPosition); // din oprindelige streng.
  str := floattostr(strtofloat(str) / 1000);
Avatar billede fun22 Nybegynder
15. august 2003 - 17:47 #21
Jeg fik hjælp af ham der havde lavet MPegPlayer1 koden til mig, så jeg lukker
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