Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Teilen (https://www.delphipraxis.net/121642-teilen.html)

TimoB 1. Okt 2008 19:58


Teilen
 
Hallo,
habe da ein Problem wo ich überhaupt nicht weiter komme...

ich gebe eine Länge in ein Eingabefeld ein mit :

Laenge := strtofloat (editlaenge.Text);

denn wird die Anzahl der Zellen eines Regals folgendermaßen berechnet:

Anzahlzellen4 := trunc((Laenge-Staenderbreite) / (Zellenbreite4+Staenderbreite));

Ständerbreite und Zellenbreite4 sind folgendermaßen berechnet:

Staenderbreite := 0.1;

Zellenbreite4 := ( 2 * Staenderabstand ) + ( 3 * Palettenabstand )+ ( 4 * Palettenbreite );

die variablen sind wie folgt definiert:

Zellenbreite4,Staenderbreite, Palettenabstand : single ;
Anzahlzellen : integer ;

mein problem ist, das das ergebnis der anzahlzellen4 bei einer Längenangabe von 3,8 = 0 ist, obwohl eigentlich 1 rauskommen müsste.
denn:
Länge-Staenderbreite ergibt 3,7 und Zellenbreite4 + Staenderbreite ergibt auch 3,7.

wenn ich mir das ergebnis ohne trunc anzeigen lasse, kommt ein ergebnis von 0,999999945 raus und denn macht trunc da natürlich eine o von.
kann mir einer sagen, warum 0,999999945 statt 1 rauskommt. liegt das evtl an den typen der variablen?

danke im vorraus.

BullsEye 1. Okt 2008 20:03

Re: Hilfe
 
Lass mal das ganze mit Trunc etc weg.. Anstatt Single könntest du auch Integer nehmen...Und dann "StrToInt"

TimoB 1. Okt 2008 20:07

Re: Hilfe
 
ich muss aber trunc machen, da man z.b. keine 4,3 zeilen haben kann.
intger kann ich auch nicht nehmen, da wir auch kommawerte eingeben können.

ich versteh halt nicht wie er auf die 0,999999945 kommen kann. wenn man 3,7 / 3,7 hat

BullsEye 1. Okt 2008 20:10

Re: Hilfe
 
Ersetz das mal:

Delphi-Quellcode:
Anzahlzellen4 := trunc((Laenge-Staenderbreite) / (Zellenbreite4+Staenderbreite));
durch:

Delphi-Quellcode:
Anzahlzellen4 := trunc((Laenge-Staenderbreite) DIV (Zellenbreite4+Staenderbreite));

TimoB 1. Okt 2008 20:11

Re: Hilfe
 
das geht nicht, div geht doch nur bei integer oder?
und die zahlen müssen single sein, da sie kommazahlen sind

RWarnecke 1. Okt 2008 20:22

Re: Hilfe
 
Zitat:

Zitat von TimoB
das geht nicht, div geht doch nur bei integer oder?
und die zahlen müssen single sein, da sie kommazahlen sind

DIV sollte überall gehen. Ersetze mal Single durch Real.

taaktaak 1. Okt 2008 20:23

Re: Hilfe
 
Versuch es doch mal mit Round()
oder besser gleich mit Format(), da wird gerundet und gleichzeitig in String konvertiert.

TimoB 1. Okt 2008 20:29

Re: Hilfe
 
div geht nur bei ganzen zahlen, real hatten wir vorher auch gehabt und da war das gleiche problem.

round können wir nicht nehmen, da wir immer auf die ganze zahl abrunden müssen.

taaktaak 1. Okt 2008 20:31

Re: Hilfe
 
Na, dann Format()

Phoenix 1. Okt 2008 20:47

Re: Hilfe
 
Zitat:

Zitat von TimoB
round können wir nicht nehmen, da wir immer auf die ganze zahl abrunden müssen.

Auf ganze Zahl abrunden: Round(Zahl - 0.5);

Beispiel: 1 --> Round(0.5) = 1
Beispiel: 1.1 --> Round(0.6) = 1
Beispiel: 1.9 --> Round(1.4) = 1


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz