Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Probleme mit VAL Funktion (https://www.delphipraxis.net/159773-probleme-mit-val-funktion.html)

AJ_Oldendorf 12. Apr 2011 12:21

Probleme mit VAL Funktion
 
Hallo zusammen,
habt ihr das Problem schonmal folgendes Problem gehabt:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  tmpDouble : Double;
  z : Integer;
begin
  Val('', tmpDouble, z);
  if z = 0 then
    ShowMessage('Mist');
end;
Bei einem Kollegen ist z=0 und bei mir ist z=1.
Habt ihr eine Idee, woran das liegen kann.
Beides Win7 32bit.
Viele Grüße
Alex

Neutral General 12. Apr 2011 12:45

AW: Probleme mit VAL Funktion
 
Hallo,

Ich schätze mal einfach, dass die Funktion Val bei Misserfolg gar nichts in z reinschreibt.
Und in lokalen Variablen kann potentiell ALLES stehen wenn sie nicht initialisiert sind.

Steht denn bei euch beiden das Gleiche drin wenn du den Code so änderst?

Delphi-Quellcode:
var
  tmpDouble : Double;
  z : Integer;
begin
  z := 0;
  Val('', tmpDouble, z);
  if z = 0 then
    ShowMessage('Mist');
PS: Es gibt auch StrToIntDef!

Delphi-Quellcode:
var
  z : Integer;
begin
  z := StrToIntDef('',0);
  if z = 0 then
    ShowMessage('Mist');

DeddyH 12. Apr 2011 12:51

AW: Probleme mit VAL Funktion
 
Wobei hier wohl TryStrToInt die bessere Option wäre, aber das prüft intern auch mit Val.

himitsu 12. Apr 2011 12:54

AW: Probleme mit VAL Funktion
 
Z gibt die Fehlerstelle an (so wie es in der OH auch erklärt ist)

kein Fehler = 0
Fehler > 0


Zitat:

Bei einem Kollegen ist z=0 und bei mir ist z=1.
Dein Kollege gibt vermutlich eine gültige Zahl (den String) an.
Und du nicht. 1 = Fehler an erster Stelle, was bei dir das Stringende ist, da du "nichts" übergeben hast.

Zitat:

Delphi-Quellcode:
if z = 0 then
  ShowMessage('Mist');

PS: z=0 istr kein Mist ... es ist gut, da 0 = kein Fehler

AJ_Oldendorf 12. Apr 2011 13:06

AW: Probleme mit VAL Funktion
 
Problem gefunden!
Ein nicht installiertes SP3 (UpdatePack3) von RAD2009 führt zu dem Fehler.
Mit dem UpdatePack3 ist der Fehler behoben im VAL.

Ist also wirklich ein Bug gewesen...

Viele Grüße
Alex

himitsu 12. Apr 2011 13:24

AW: Probleme mit VAL Funktion
 
Bei dir ist Z jetzt 0? (in dem Beispiel aus Post #1)

Dann hast du jetzt einen Bug eingebaut, denn die 1 war schon richtig. :gruebel:

jfheins 12. Apr 2011 14:04

AW: Probleme mit VAL Funktion
 
Zitat:

Zitat von himitsu (Beitrag 1094630)
Bei dir ist Z jetzt 0? (in dem Beispiel aus Post #1)

Dann hast du jetzt einen Bug eingebaut, denn die 1 war schon richtig. :gruebel:

Das kommt wohl darauf an, ob man einen leeren String als gültige Zahl erachtet.

Da aber ja heutzutage kein vernünftiger Programmierer auf die Idee käme, Val() in einem neuen Code zu benutzen (:mrgreen:) dürfte die Abwärtskompatibilität das richtige Verhalten definieren. Und diese wurde wohl mit dem Update wiederhergestellt ;)

=> http://www.bobswart.nl/weblog/Blog.aspx?RootId=5:3219

himitsu 12. Apr 2011 14:59

AW: Probleme mit VAL Funktion
 
Bei mir sagen D7 und XE was von 1.


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