Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Formatieren einer Realvariable??


Henry - Di 10.06.03 20:02
Titel: Formatieren einer Realvariable??
Hallo,

habe da ein kleines Problem mit der Formatierung eine Reavariablel in einen String

Ich formatiere mir meine Realvariable wie folgt:

Delphi-Quelltext
1:
 Str(kmh :3:1,Tempo);                    

Soweit auch in Ordnung. Es funktioniert.

Nun möchte ich aber das mir meine Realvariable in einen String Formatiert wird mit drei Stellen vor dem Komma und einer nach dem Komma (wie ich es ja auch formatiert habe) allerdings mit einer Vornoll wenn das ergebnis der Realvariablen nur zwei oder einstellig ist. Brauche nämlich auf jeden Fall füllende Vornullen.

Wie kann ich das lösen? Dagiebt es doch bestimmt so eine Funktion wie ich sie verwendet habe, oder?

Danke schon einmal im voraus.


Edit: Habe den Titel umbenannt (siehe Hinweis Luckie) und den Text angepasst Hatte mich vorher geirrt und Integer geschrieben


Tweafis - Di 10.06.03 20:06


Delphi-Quelltext
1:
2:
if kmh<100 then Tempo := '0'+Tempo;
if kmh<10 then Tempo := '0'+Tempo;


So würde ich es jetzt auf die schnelle machen. Guck gleich nochmal wegen Format...


Delete - Di 10.06.03 20:17

Ein Integer hat keine Nachkommastellen und was nicht da ist, kann man nicht formatieren. So einfach ist das.


Tweafis - Di 10.06.03 20:20

Hab auch erst überlegt, da ich das nachprogrammiert hab (um hilfe zu geben) weil das nicht ging. :mrgreen:


Delphi-Quelltext
1:
  Tempo := Format('%5.1f', [kmh]);                    


Das ist noch was falsch mit den führenden Nullen :(


Henry - Mi 11.06.03 06:34

@Luckie: Sorry, hast natürlich recht, Integer hat keine Nachkommastellen :oops:
Die Variable ist natürlich vom Typ Real, hatte da was durcheinandergebraxht.

@Tweafis: werde ich mir mal zu gemüte führen, danke erstmal.


Tweafis - Mi 11.06.03 07:23

Ich hab das mit den Formatsstrings einfach mal so aus der Hilfe zusammeneschustert.
ich weiß jetzt nicht:

a) ob es f,g oder n ist (der Formatbuchstabe)
b) Wie das mit den Nullen ist (wird das ',' als stelle gerechnet?)


maxk - Mi 11.06.03 07:45


Delphi-Quelltext
1:
2:
3:
4:
function Nullen(Str:string;MaxZeichen:integer):string;
begin
 Result:=StringOfChar('0',MaxZeichen-Length(Str))+Str;
end;
Damit klappen die Nullen!


Henry - Mi 11.06.03 18:26

Danke euch erstmal allen.

Die erste Version von Tweafis hat erstmal funktioniert.
Werde aber mal die von maxk auch noch probieren.

Was mir noch lieber wäre, ist eine Funktion (wie z.B. ich si oben angegeben hatte) die das gleich alles mit einmal macht. Also wenn ich angebe 5 Stellen vor dem Komma dann sollte sie den rst mit Vornullen direkt aufführen odhne das man noch eine andere Funktion zusätzlich braucht.
Aber das scheint es nicht wirklich zu geben.

Aber ich habe ja jetzt funktionierende Möglichkeiten.


Wolff68 - Do 12.06.03 23:08

Hab mal versucht das ganze als einen Befehl hinzubekommen.
(OK, indirekt sind es schon mehrere)

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Button1Click(Sender: TObject);
var
  digits, precision : Integer;
begin
  digits := 5// Stellen VOR dem Komma
  precision := 3// Stellen NACH dem Komma

  Edit1.Text := Format('%0.'+IntToStr(digits)+'d', [Trunc(x)]) // Vor Komma
               +Copy(FloatToStrF(Frac(x),ffFixed,15,13)
                    ,Pos(decimalseparator,FloatToStrF(Frac(x),ffFixed,15,13))
                    ,precision+1); // Nach Komma
end;


X ist hier ein Real-Wert.

Probleme könnten bei Digit-Überschreitungen auftreten, oder wenn der Nachkommateil in das Wissenschaftliche Format umbricht.


Henry - Fr 13.06.03 18:10

Danke, werde ich mich mal mit befassen.