AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit der Procedure : val

Ein Thema von Chemiker · begonnen am 11. Dez 2006 · letzter Beitrag vom 15. Dez 2006
Antwort Antwort
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#1

Problem mit der Procedure : val

  Alt 11. Dez 2006, 20:18
Hallo,

ich habe folgendes Problem mit der Procedure val

Delphi-Quellcode:
st1:= '0000-135.12';
val(st1,Zahl,code);
Dann ist das Ergebnis von der Variable Zahl = 0.00

Wenn die Zahl kein Vorzeichen hat, also

Delphi-Quellcode:
st1:= '00000135.12';
val(st1, Zahl, code);
So ist das Ergebnis von Zahl = 135.12

Kann mir jemand da weiterhelfen, wie ich den String trotz Vorzeichen in die richtige Zahl umwandeln kann.


Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Problem mit der Procedure : val

  Alt 11. Dez 2006, 20:36
Zitat von Chemiker:
Kann mir jemand da weiterhelfen, wie ich den String trotz Vorzeichen in die richtige Zahl umwandeln kann.
Ein Vorzeichen heisst Vorzeichen, weil das Zeichen vor der Zahl steht. Dein Vorzeichen steht mitten in der Zahl und auch ein Mathematiker würde dir keine führenden Nullen vor einem Vorzeichen akzeptieren. Das Verhalten von Val() ist vollkommen korrekt. Wenn das Vorzeichen wirklich vorne steht, dann würde das auch klappen. Daher benutze die Stringfunktionen um das Vorzeichen entsprechend zu korrigieren.
  Mit Zitat antworten Zitat
Benutzerbild von trojaner
trojaner

Registriert seit: 11. Mai 2004
Ort: Herisau CH
13 Beiträge
 
Delphi 10 Seattle Architect
 
#3

Re: Problem mit der Procedure : val

  Alt 12. Dez 2006, 14:12
Hallo
Delphi-Quellcode:
st1:= '0000-135.12';

repeat
  val(st1,Zahl,code);
  delete(st1,code,1);
until code = 0;
versuche es mal so!
Gruss
Trojaner
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Problem mit der Procedure : val

  Alt 12. Dez 2006, 14:32
Hallo,

wenn es sich nur um ein deplatziertes Minuszeichen handelt, dann hätte ich auch einen Vorschlag:

Delphi-Quellcode:
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;
Freundliche Grüße
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: Problem mit der Procedure : val

  Alt 12. Dez 2006, 15:12
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?)
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Problem mit der Procedure : val

  Alt 15. Dez 2006, 23:48
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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  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 03:36 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