Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - StrToFloat Dezimalzahlen mit Komma anzeigen


ardely - Di 17.03.09 12:01
Titel: StrToFloat Dezimalzahlen mit Komma anzeigen
Guten Tag an alle,
Ich habe hin und her gesucht und nichts Richtiges zur mein Problem gefunden wie ich es lösen kann
hier ein Beispiel:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
 iR : double;
begin
 
    iR := StrToFloat('0,001') * StrToFloat('0,001');  //zeigt 1e-06 
    showmessage(floattostr(iResultat)); //zeigt '1E-6' 
    //die Anzeige sollte hier genauer sein wie -> '0,000001'
 
end;


Also das Inhalt von iR ist 1e-06 beim anzeigen mit showmessage.
Wie kann ich die Anzeige von Dezimalzahlen mit Komma genauer bekommen
iR sollte '0,000001' anzeigen.

Sehr vielen dank für ihre beispiele und Hilfe
Grüsse


Keldorn - Di 17.03.09 12:05

Hallo,

gugg Dir mal floattostrF oder formatfloat an

edit: warum StrToFloat('0,001') ?

Gruß Frank


ardely - Di 17.03.09 12:26

Danke für den hinweis,
Ich schaue mal an wie ich damit umgehen kann!


ardely - Di 17.03.09 13:12

Hallo
Aber wie mache ich wenn die Wehrte von iR zufällig ist
Z.B.
0,001 * 0,00001 = 0,00000001
0,00001 * 0,000001 = 0,00000000001
Wenn ich dass richtig verstanden habe mit FormatFloat ist das Resultat fest angegeben!

Danke


BlackDragon - Di 17.03.09 13:53

Hi.

ardely hat folgendes geschrieben:
Hallo
Aber wie mache ich wenn die Wehrte von iR zufällig ist
Z.B.
0,001 * 0,00001 = 0,00000001
0,00001 * 0,000001 = 0,00000000001
Wenn ich dass richtig verstanden habe mit FormatFloat ist das Resultat fest angegeben!

Danke


Irgendwie verstehe ich die Frage nicht so ganz und habe das Gefühl, dass andere das selbe Problem haben. :(

Deshalb mein Vorschlag: Beschreibe doch mal was du genau vorhast.

Und noch ein Link zum Stichwort FloatToStrF [http://www.delphibasics.co.uk/RTL.asp?Name=FloatToStrF].

Gruß

BlackDragon


ardely - Di 17.03.09 15:01

Hallo, hier ein beispiel.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure TForm1.Button2Click(Sender: TObject);
var
 iR,iZahlA,iZahlB : double;  // plus portable
begin

   iZahlA := 0.000001// Dieses Zahl schwankt von 0,000001 bis 100
   iZahlB := 0.0001// Dieses Zahl schwankt von 0,000001 bis 100
   // für den test ist iZahlA und iZahlB fest
   //...
   iR := iZahlA * iZahlB;
   //...
   //..

   // wie soll ich die parametern in FloatToStrF einlegen wenn das Wert in
   // iZahlA und iZahlB schwangt von 0,000001 bis 100
   // Das heisst iR kann einmal das wert haben als beispiel 0,000001
   // oder einmal 0,0001 oder einmal 0,000000001 oder 12,45 oder 37,9734
   // wenn ich z.b 8, 4  eintrage in FloatToStrF stimmt nicht für alle andere Zahlen
     showmessage( FloatToStrF(iR, ffNumber, 84));
   // wenn zum beispiel das zufall Zahl 0,000000001 kommt, mit
   //  showmessage( FloatToStrF(iR, ffNumber, 8, 4)) bekomme ich '0.0000'
   // aber wenn zufall Zahl '0.0001' dann ist mein FloatToStrF(iR, ffNumber, 8, 4) OK

end;


Wie kann ich dieses Problem lösen...
Vielen dank für Ihre Angebot.


Keldorn - Di 17.03.09 15:21

und das 2. Stichwort, formatfloat?

Delphi-Quelltext
1:
     showmessage(formatfloat('0.###############',ir));                    


allerdings: ich würde nicht double nehmen, sondern extended. Wenn du mit so kleinen Zahlen hantierst, bekommst Du mit dem kleinern Typ Double mehr ungenauigkeiten rein.
außerdem ist dein FloattostrF-Aufruf bei precision nicht richtig, siehe oh (da sollten für double 15 rein) !


ardely - Di 17.03.09 15:26

Danke ich bin am testen...


ardely - Mi 18.03.09 11:07

habe mehrere test ausgeführt und es funktionniert für meine Applikation!

Danke und schönen Tag