![]() |
Problem Mit FloatToStr
Hi,
auch ich bin neu hier im Forum angemeldet(hab vorher öfter schon vorbeigeschaut) doch jetzt hab ich ein Problem und keinen Plan woran es liegen könnte Ich benutze Delphi 3 (tja leider kein geld für was besseres) und irgendwie mag Delphi folgende Zeilen nicht
Delphi-Quellcode:
wobei erg2 ein String und erg5 ein real ist.
erg2:=FloatToStr(erg5);
Er sagt dann immer "Operator ist auf diesen Operandentyp nicht anwendbar" Was soll ich tun Bitte helft mir *verzweifeltguck* |
Re: Problem Mit FloatToStr
Hallo inherited,
herzlich willkommen in der DP. Ich erhalte keine Fehlermeldung beim Compilieren. Kannst Du uns ein wenig mehr Code zeigen? Mit freundlichen Grüßen engine |
Re: Problem Mit FloatToStr
Herzlich willkommen in der Delphi-PRAXiS.
Zitat:
Delphi-Quellcode:
Wenn die Prozedur fehlerlos übersetzt wird, dann musst du mal nachforschen, welchen Typ erg2 und erg5 bei dir wirklich haben.
procedure ConversionTest;
var s: string; r: real; begin r := 1.5; s := FloatToStr(r); end; Grüße vom marabu |
Re: Problem Mit FloatToStr
ich hab jetzt ein bisschen rumgedebugged(was für ein wort) und es scheint an meiner if-abfrage zu liegen dessen teil der o.g. quelltext ist und nicht daran. Vielen dank trotzdem
ach ja auch da find ich den fehler nicht(nicht erschrecken das ist gerade so verkompliziert weil ich den fehler gesucht hatte und es deshalb zerlegt in einzelne schritte)
Delphi-Quellcode:
var
erg2: String; erg3: Integer; erg4, erg5: Real; //... procedure Runden(erg1: String); var i: Integer; for i := 1 to length(erg1) do begin erg2:=erg2+'0'; erg2[i]:=erg1[i]; if erg1[i]= ',' then begin erg2[i+1]:=erg1[i+1]; erg2[i+2]:=erg1[i+2]; if erg1[i+3]='5' or if erg1[i+3]='6' or if erg1[i+3]='7' or if erg1[i+3]='8' or if erg1[i+3]='9' then begin erg3:=round(StrToInt(erg2)*100); erg2:=IntToStr(erg3); erg4:=StrToFloat(erg2); erg5:=erg4/100.0; erg2:=FloatToStr(erg5); erg2:=IntToStr(erg3); end; //hier liegt der fehler end; end; end; |
Re: Problem Mit FloatToStr
Besser, du schreibst mal, was du erreichen willst. Was geht rein in deine Prozedur (ein string, welches Format?), was soll raus kommen? Wieder ein String? Du verwendest ohne Not globale Variablen (erg2, erg3, ...), die in deiner Prozedur nicht initialisiert werden. Der Name Runden() suggeriert ja schon etwas. Welches Rundungsverfahren willst du umsetzen? Welche Genauigkeit bzw. wieviele Nachkommastellen soll das Ergebnis haben?
marabu |
Re: Problem Mit FloatToStr
sooviele fragen?? nagut also mit erg2 soll man weiterarbeiten(warum ich keine funktion nutze: keine ahnung) deswegen global
erg3,4,5 sind deshalb global weil ich sie nur zur fehlerüberprüfung genutzt habe und sie eben mal deklariert hab. was da reingeht ist eine zahl als string im format 100,01 o.ä. es soll beträge die eingegeben werden auf 3 nachkommastellen runden Für alternativen/verbesserungen bin ich stets offen, solang sie delphi 3 kompatibel sind edit: kann es sein das es am if ... or if... liegt? |
Re: Problem Mit FloatToStr
Das geht nicht?
Delphi-Quellcode:
marabu
function Gerundet(rValue: real): real;
begin Result := Round(rValue * 1000) / 1000; end; |
Re: Problem Mit FloatToStr
HEY, das is ja GENIAL warum ich da nicht selbst drauf gekommen bin...
DANKE |
Re: Problem Mit FloatToStr
Einen Pferdefuß hat dieser Ansatz - er beschränkt die Zahl der signifikanten Stellen in deiner Real-Variablen auf etwa 8. Vielleicht möchtest du deinen String-Ansatz ja noch etwas im Auge behalten...
Gute Nacht marabu |
Re: Problem Mit FloatToStr
Hi marabu,
Ich runde immer auf und verwende Extended:
Delphi-Quellcode:
Irgendwann hab ich mir das 'Real' abgelehnt. Irgendwer im Forum hat mich darauf gebracht, lieber CPU-native Typen zu verwenden. Double und Extended sind die wohl.
function Gerundet(rValue: Extended): Extended;
begin Result := Round(0.5 + rValue * 1000) / 1000; end; So jetse ...chhrrr....chhhrrrr... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 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