Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi int64 * Dezimalzahl - wie geht das? (https://www.delphipraxis.net/28299-int64-%2A-dezimalzahl-wie-geht-das.html)

Tubos 22. Aug 2004 22:19


int64 * Dezimalzahl - wie geht das?
 
Hallo;

gibt es eine Möglichkeit, eine int64-Variable mit einer Dezimalzahl zu multiplizieren?

Zum Beispiel so:
[delphi]var a,b: int64;
begin
a:=...
b:=a * 0.4
...
end;[delphi]
Der Compiler sagt:
"Inkompatible Typen: int64 und extended".
Und a div 2.5 geht auch nicht weil div nur mit Ganzzahlen funktioniert.

Wie kann ich das sonst machen?d

SirThornberry 22. Aug 2004 22:22

Re: int64 * Dezimalzahl - wie geht das?
 
du könntest runden bzw. abschneiden.
Delphi-Quellcode:
b:=round(a * 0.4 );//runden
b:=trunc(a * 0.4 );//abschneiden

Luckie 22. Aug 2004 22:24

Re: int64 * Dezimalzahl - wie geht das?
 
b muss vom Typ Delphi-Referenz durchsuchenExtended sein, weil Delphi automatisch den Ergebnisdatentyp erweitert.

dizzy 22. Aug 2004 22:25

Re: int64 * Dezimalzahl - wie geht das?
 
Delphi-Referenz durchsuchenround, Delphi-Referenz durchsuchentrunc, oder b vom Typ Extended ;)


\\wohaa, viel zu spät, aber dafür die beiden obigen posts zusammengefasst :roll:

Tubos 22. Aug 2004 22:34

Re: int64 * Dezimalzahl - wie geht das?
 
Zitat:

oder b vom Typ Extended
Das geht nicht, weil der Zahlenbereich von Extended nicht so groß ist wie der von int64.

Geht aber mit trunc.
Danke!

dizzy 22. Aug 2004 22:43

Re: int64 * Dezimalzahl - wie geht das?
 
\\edit: MIST Ich wollte diesen Beitrag zitieren, statt dessen hab ich ihn weg-editiert... Sorry! :oops: :?

Tubos 22. Aug 2004 23:12

Re: int64 * Dezimalzahl - wie geht das?
 
Zitat:

Aber ist Extended nicht 80 Bit breit, und Int64 nur 64 Bit?
wirklich?
ich dachte, beide sind 64 bit...

ja, die delphi-hilfe sagt auch: 10 byte, also 80 bit.

Na dann kann ich tatsächlich Extended verwenden.

dizzy 22. Aug 2004 23:44

Re: int64 * Dezimalzahl - wie geht das?
 
Double ist auch 64 Bit breit.

Chewie 23. Aug 2004 10:42

Re: int64 * Dezimalzahl - wie geht das?
 
Aber man sollte auch beachten, dass Ganzzahl- und Fließkommazahlen komplett anders aufgebaut sind ;)

dizzy 23. Aug 2004 10:45

Re: int64 * Dezimalzahl - wie geht das?
 
Zitat:

Zitat von Chewie
Aber man sollte auch beachten, dass Ganzzahl- und Fließkommazahlen komplett anders aufgebaut sind ;)

Deswegen ja mein Hinweis oben auf den möglichen Verlust der Genauigkeit ;)

nailor 23. Aug 2004 13:52

Re: int64 * Dezimalzahl - wie geht das?
 
bei tausenden von stellen dürften 8 geltende ziffern schon eine _SEHR_ große ungenauigkeit machen. (zwar nicht vom relativen fehler her, aber wenn man immer eins hochzählen will, könnte es kritisch werden)

dizzy 23. Aug 2004 14:13

Re: int64 * Dezimalzahl - wie geht das?
 
Das versuchte ich durch meine etwas ketzerische Aussage:
Zitat:

Zitat von dizzy
... Nungut, die Genauigkeit leidet da etwas - es wären bei so vielen Stellen auch wirklich so viele Nullen dabei, aber immerhin! :mrgreen:

(Das Original zum Zitat ist weg... hab mit dem Beitrag Mist gebaut (s.o.))
ja deutlich zu machen. Das taugt dann eher für Abschätzungen als für Hochpräzisionsalgebra :zwinker:.
Aber je nach dem wie groß die Werte wirklich werden, kann die Genauigkeit ja trotzdem ausreichen. Mehrere tausend, oder auch schon hundert Stellen sind ja eher selten... mann müsste schon "EINE_SEHR_GROSSE_ZAHL * Max(Int64);" rechnen um da überhaupt dran zu kommen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 Uhr.

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