Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Ausgabe ist falsch, warum? (https://www.delphipraxis.net/154195-ausgabe-ist-falsch-warum.html)

Dave729 31. Aug 2010 18:20

Ausgabe ist falsch, warum?
 
Hallo, habe ein kleines Problem.
Ich kürze es mal so ab:

Wenn Delphi eine Zahl multiplizieren soll, dann kommt ein falsches ergebnis raus

Delphi-Quellcode:
s:='4985770';
min:=(StrToInt(s)*800);
Das Ergebnis ist -306351296

Wenn ich aber auf den gleichen weg die Zahl mit 1000 oder 1200 multipliziere, dann kommt das richtige ergebnis.
Warum nicht bei 800?

Kann mir da einer helfen?

MfG Dave729

mkinzler 31. Aug 2010 18:25

AW: Ausgabe ist falsch, warum?
 
Was für ein Typ hat min?

Dave729 31. Aug 2010 18:27

AW: Ausgabe ist falsch, warum?
 
Zitat:

Zitat von mkinzler (Beitrag 1046421)
Was für ein Typ hat min?

srry hatte ich vergessen hinzuschreiben

min ist Integer
s ist String, kommt von Edit1


MfG dave

jfheins 31. Aug 2010 18:30

AW: Ausgabe ist falsch, warum?
 
Ja dann ist klar :mrgreen:
Zitat:

Zitat von Dave729 (Beitrag 1046416)

Wenn ich aber auf den gleichen weg die Zahl mit 1000 oder 1200 multipliziere, dann kommt das richtige ergebnis.
Warum nicht bei 800?

Falsch. Es kommt was positives raus, aber nicht das richtige.

Ein Integer geht nun mal nur bis 2^31-1 darüber passiert ein Integerüberlauf (googlen)

Abhilfe: Schalte die Überlaufmeldungen ein und benutze Int64 oder vermeide so große Zahlen ;)

http://de.wikipedia.org/wiki/Ganzzahlüberlauf

himitsu 31. Aug 2010 18:44

AW: Ausgabe ist falsch, warum?
 
Zitat:

Zitat von mkinzler (Beitrag 1046421)
Was für ein Typ hat min?

Was für ein Typ "Min" hat ist egal.
Für diese Berechnung sind erstmal nur die Typen der beiden Operanden verantwortlich und dann wird das Ergbnis versucht an "Min" zu übergeben.

StrToInt = Integer
800 = unbestimmt (der Compiler nimmt Integer, weil die 800 da reinpaßt)
> Ergebnis > Integer * Integer = Integer


PS: Genau deswegen soll Embarcadero endlich mal solche Fehlerprüfungen standardmäßig aktivieren.

Und die Leerer sollen erstmal die Grundlagen des Debugging vermitteln, bzw. es endlich selber mal lernen
und darauf hinweisen, daß man dieses (Überlauf- und Bereichsprüfung) in den Projektoptionen besser mal aktivieren soll, vorallem wenn keine große Ahnung von dieser Materie hat und Fehler vorprogrammiert sind.

Dave729 31. Aug 2010 22:01

AW: Ausgabe ist falsch, warum?
 
Also das Problem hab ich nicht lösen können, leider.
Ich hab leider auch Zahlen die etwas größer sind als Millioen. Aber da wird dann eh gerundet.

Habt Ihr noch nen Vorschlag??


MfG Dave

jfheins 31. Aug 2010 22:08

AW: Ausgabe ist falsch, warum?
 
Wie gesagt:
Zitat:

Zitat von jfheins (Beitrag 1046424)
Abhilfe: Schalte die Überlaufmeldungen ein und benutze Int64 oder vermeide so große Zahlen ;)


Sir Rufo 1. Sep 2010 07:40

AW: Ausgabe ist falsch, warum?
 
Zitat:

Zitat von Dave729 (Beitrag 1046498)
Habt Ihr noch nen Vorschlag?

Ja RTFM

http://docwiki.embarcadero.com/RADSt...n/Simple_Types

Such dir den passenden Datentyp aus der alle Bereiche abdeckt und benutze diesen.

himitsu 1. Sep 2010 09:09

AW: Ausgabe ist falsch, warum?
 
Und genau deswegen solltes du endlich mal die Überlaufprüfung in den Projektoptionen anschalten, denn diese sagt dir dann, ob ein Typ nicht passt, bzw. zu klein ist.

Dave729 1. Sep 2010 14:05

AW: Ausgabe ist falsch, warum?
 
hat alles geklappt ^^
Danke jungs. Ich dachte erst das ich die Überlaufprüfung eingeschaltet hatte, war aber nicht so :-)
und jetzt mach ich es mit int64. Klappt perfect.

Danke, ihr seit die besten


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:37 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