![]() |
Problem mit der Procedure : val
Hallo,
ich habe folgendes Problem mit der Procedure val
Delphi-Quellcode:
Dann ist das Ergebnis von der Variable Zahl = 0.00
st1:= '0000-135.12';
val(st1,Zahl,code); Wenn die Zahl kein Vorzeichen hat, also
Delphi-Quellcode:
So ist das Ergebnis von Zahl = 135.12
st1:= '00000135.12';
val(st1, Zahl, code); Kann mir jemand da weiterhelfen, wie ich den String trotz Vorzeichen in die richtige Zahl umwandeln kann. Bis bald Chemiker |
Re: Problem mit der Procedure : val
Zitat:
|
Re: Problem mit der Procedure : val
Hallo
Delphi-Quellcode:
versuche es mal so!
st1:= '0000-135.12';
repeat val(st1,Zahl,code); delete(st1,code,1); until code = 0; Gruss Trojaner |
Re: Problem mit der Procedure : val
Hallo,
wenn es sich nur um ein deplatziertes Minuszeichen handelt, dann hätte ich auch einen Vorschlag:
Delphi-Quellcode:
Freundliche Grüße
function TryVal(s: String; var e: Extended): Boolean;
var iPos: Integer; begin iPos := Pos('-' ,s); if iPos > 1 then begin Move(s[1], s[2], Pred(iPos)); s[1] := '-'; end; Val(s, e, iPos); Result := iPos = 0; end; |
Re: Problem mit der Procedure : val
Marabu: Ich habe Bedenken bei deinem Code: Durch das Move wird der String verschoben, aber ich denke das Ende des Strings wird nicht angepasst so dass am Ende eine Zahlenreihe nochmals erscheint, welche zu falschen Ergebnissen führt. Dies könnte sogar soweit gehen, dass der Dezimalpunkt doppelt vorhanden ist.
Dieser Einwand entsteht jetzt nur durch lesen und überdenken deines Codes - liege ich da richtig? Falsch - alles richtig. Ich hatte das verschieben falsch herum betrachtet. Marabu macht alles richtig - der Code ist in Ordnung und sollte schneller sein und vor allem sicherer (Gefahr eines Deadlocks bei trojaner?) |
Re: Problem mit der Procedure : val
Hallo,
vielen Dank für Eure Tipps. Die function TryVal() von marabu hat mir sehr weitergeholfen! Das Problem ist deshalb entstanden, weil dieser String zu einem Datenblock gehört der von einer serielle Schnittstelle übertragen wird und von einem Programm in seine Bestandteile zerlegt wird. Dabei benutze ich für den Mess-Wert der übertragen wird eine Maske aus 11 Nullen, damit der Dateblock immer die gleiche Länge hat. Dabei habe ich schlichtweg übersehen, dass es auch negative Temperaturen gibt. Bis bald Chemiker |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 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