[delphi] float naar int waarom wil het niet

Pagina: 1
Acties:

  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 21:28
Ik ben al een tijdje bezig en ik kom er nu niet meer uit

ik heb een jpg die ik laat openen dan verklein en dan weer opsla

als ik nu invul dat het plaatje 213 pixels hoog moet zijn dan moet ik met het verschil tussen die 213 en de oiginele hoogte de breedte uitrekenen

dat word een float maar ik wil der een int van maken maar het lukt me op de een of andere manier niet

is daar iets apparts voor ofzo :?

PSN jschut_82 | Xbox: JSchut82


  • Kool
  • Registratie: September 1999
  • Niet online
Round :?

  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 21:28
ja dat gebruik ik ook maar dan blijft het op 1 of de andere manier een float

PSN jschut_82 | Xbox: JSchut82


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:42
Post eens het stuk code.

Als je expliciet cast naar een integer, en je plaatst de waarde in een integer, dan zou het dan toch geen probleem mogen zijn?
Hoe weet je dat die Integer nu eigenlijk toch nog een float is? Dat kan niet?

https://fgheysels.github.io/


  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 21:28
code:
1
2
3
4
if (fileheight = '') then
                      begin
                      fileheight := inttostr(round(form1.image1.Picture.Bitmap.height / round(form1.Image1.picture.Width / strtoint(filewidth))));
                      end;

het gaat hierom en als ik me plaatje ga scalen dan krijg ik

"illigal float opperation"

edit:

dit doe ik er later mee
[code]bitmapimage.canvas.StretchDraw(Rect(0,0,strtoint(filewidth),strtoint(fileheight)),form1.image1.Picture.Graphic);[/code]

PSN jschut_82 | Xbox: JSchut82


  • brid
  • Registratie: Januari 2001
  • Laatst online: 30-07 16:21

brid

Onze excuses voor het ongemak

function FloatToInt(); of iets in die richting misschien ander IntTostr en daarna STrtoINt. Staat vast wel iets over in de help denk ik. Maar het moet in iedergeval zoiets zijn

DIY NAS, Hoofd PC
Unchain your pc/laptop, buy a SSD!!!!!


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:25

Creepy

Tactical Espionage Splatterer

Als je die ene regel ff opsplitst in meerdere (m.b.v. wat temp. variabelen) kan je zien op welke regel het mis gaat, en is het een stuk makkelijker zoeken.

Waarom zijn de width en height trouwens strings??

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:42
Op donderdag 25 april 2002 15:34 schreef JSchut het volgende:
code:
1
2
3
4
if (fileheight = '') then
                      begin
                      fileheight := inttostr(round(form1.image1.Picture.Bitmap.height / round(form1.Image1.picture.Width / strtoint(filewidth))));
                      end;

het gaat hierom en als ik me plaatje ga scalen dan krijg ik

"illigal float opperation"

edit:

dit doe ik er later mee
[code]bitmapimage.canvas.StretchDraw(Rect(0,0,strtoint(filewidth),strtoint(fileheight)),form1.image1.Picture.Graphic);[/code]
code:
1
2
3
4
if (fileheight = '') then
                      begin
                      fileheight := inttostr(round(form1.image1.Picture.Bitmap.height) / round(form1.Image1.picture.Width / strtoint(filewidth)));
                      end;

https://fgheysels.github.io/


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:25

Creepy

Tactical Espionage Splatterer

Op donderdag 25 april 2002 15:38 schreef whoami het volgende:

[..]
code:
1
2
3
4
if (fileheight = '') then
                      begin
                      fileheight := inttostr(round(form1.image1.Picture.Bitmap.height) / round(form1.Image1.picture.Width / strtoint(filewidth)));
                      end;
Dan staat er dus inttostr(round(..) / round(..));

En ga je een deling gebruiken voor de input van inttostr

inttostr(round((round(..) / round(..))); zou dan wat beter moeten gaan denk ik :)

Maar een bitmap.height of width rounden heeft geen nut want die zijn al integers.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:25

Creepy

Tactical Espionage Splatterer

Lekker lay-out verneukend zo. maar goed.

Probeer maar 1 round te gebruiken, anders kan je ook nog een deling door 0 krijgen.
code:
1
blaat:=round(a / round(b/c));

als b/c < 0.5 dan komt daar 0 uit en krijg je a/0 wat ook een foutmelding geeft.

schrijf het dan zo
code:
1
blaat:=round(a/b/c);

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • JSchut
  • Registratie: Februari 2002
  • Laatst online: 21:28
als ik
code:
1
2
fileheight := floattostr(3/1);
heightoffile := strtoint(fileheight);

doe

dan moet hier toch een int uit komen :?

maar ik krijg de melding illigal float opperation :?

ik ben de weg nu wel ff kwijt :'(

PSN jschut_82 | Xbox: JSchut82


Verwijderd

Dit werkt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Button1Click(Sender: TObject);
var
  f: extended;
  i: integer;
  s: string;
begin
  f := 3.1;
  i := 1;
  s := FloatToStr(f/i);

  edit1.text := s;
end;

Maar misschien een gekke vraag. Waarom doe je in je code eerst een FloatToStr, om er vervolgens met StrToFloat weer een float van te maken?

  • Bergen
  • Registratie: Maart 2001
  • Laatst online: 08-09 08:43

Bergen

Spellingscontroleur

Ligt vast aan de decimalseperator..

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Op donderdag 25 april 2002 15:34 schreef JSchut het volgende:
code:
1
2
3
4
if (fileheight = '') then
                      begin
                      fileheight := inttostr(round(form1.image1.Picture.Bitmap.height / round(form1.Image1.picture.Width / strtoint(filewidth))));
                      end;

het gaat hierom en als ik me plaatje ga scalen dan krijg ik

"illigal float opperation"
Je doet round(int/round(int/int))

Je moet integers niet delen. Daarvoor heb je het commando 'div'.

Als je '/' wilt gebruiken kan je beter eerst floats maken van je getallen.

Siditamentis astuentis pactum.

Pagina: 1