AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ausgabe ist falsch, warum?

Ein Thema von Dave729 · begonnen am 31. Aug 2010 · letzter Beitrag vom 1. Sep 2010
Antwort Antwort
Dave729

Registriert seit: 8. Dez 2008
Ort: NRW, bald wieder in Sachsen
48 Beiträge
 
Delphi 6 Enterprise
 
#1

Ausgabe ist falsch, warum?

  Alt 31. Aug 2010, 18:20
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
Dave
Was nicht passt, wird passend gemacht
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Ausgabe ist falsch, warum?

  Alt 31. Aug 2010, 18:25
Was für ein Typ hat min?
Markus Kinzler
  Mit Zitat antworten Zitat
Dave729

Registriert seit: 8. Dez 2008
Ort: NRW, bald wieder in Sachsen
48 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: Ausgabe ist falsch, warum?

  Alt 31. Aug 2010, 18:27
Was für ein Typ hat min?
srry hatte ich vergessen hinzuschreiben

min ist Integer
s ist String, kommt von Edit1


MfG dave
Dave
Was nicht passt, wird passend gemacht
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

AW: Ausgabe ist falsch, warum?

  Alt 31. Aug 2010, 18:30
Ja dann ist klar

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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#5

AW: Ausgabe ist falsch, warum?

  Alt 31. Aug 2010, 18:44
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Dave729

Registriert seit: 8. Dez 2008
Ort: NRW, bald wieder in Sachsen
48 Beiträge
 
Delphi 6 Enterprise
 
#6

AW: Ausgabe ist falsch, warum?

  Alt 31. Aug 2010, 22:01
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
Dave
Was nicht passt, wird passend gemacht
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#7

AW: Ausgabe ist falsch, warum?

  Alt 31. Aug 2010, 22:08
Wie gesagt:
Abhilfe: Schalte die Überlaufmeldungen ein und benutze Int64 oder vermeide so große Zahlen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Ausgabe ist falsch, warum?

  Alt 1. Sep 2010, 07:40
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#9

AW: Ausgabe ist falsch, warum?

  Alt 1. Sep 2010, 09:09
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Dave729

Registriert seit: 8. Dez 2008
Ort: NRW, bald wieder in Sachsen
48 Beiträge
 
Delphi 6 Enterprise
 
#10

AW: Ausgabe ist falsch, warum?

  Alt 1. Sep 2010, 14:05
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
Dave
Was nicht passt, wird passend gemacht
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:58 Uhr.
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