Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Zufaellige Kommazahlen


flowstar - Di 10.02.04 17:04
Titel: Zufaellige Kommazahlen
Ist wahrscheinlich ne keichte Frage aber hab nichts dazu gefunden:
Wie erstelle zurfaellige ich Kommazahlen mit 2 Kommastellen im bereich von -3 bis+ 3?


Gausi - Di 10.02.04 17:39

Ich würde da so rangehen, einfach die Zahl aus zwei Zufallszahlen aufbauen. nur in Pseudocode, ich nehme mal an, dass du random() kennst:

Delphi-Quelltext
1:
2:
3:
vorkomma:=Zufallszahl(-2,2)
nachkomma:=Zufallszahl(0,99);
gesamtzahl:=vorkomma + nachkomma/100;


Andere Möglichkeit: (noch einfacher)

Delphi-Quelltext
1:
2:
x:=Zufallszahl(-300,300);
x:=x/100;


Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt


catweasel - Di 10.02.04 20:28

Zitat:
x:=Zufallszahl(-300,300);
x:=x/100;


Das ist die Frage, ob es so einfach ist ...

Wenn es wirklich immer zwei Kommastellen sein sollen wäre

300/100 = 3 , oder 150/300 = 0,5 ungeeignet ...

Da bliebe wohl nur erste Variante (dabei die = "00", "10", "20" etc. per test ausschliessen). Also am besten gleich die nachkommaziffern einzeln erstellen...

Catweasel


Keldorn - Di 10.02.04 20:53

Hallo


Delphi-Quelltext
1:
zahl:=(random(601)-300) / 100;                    


Mfg Frank


catweasel - Di 10.02.04 23:44

Zitat:
zahl:=(random(601)-300) / 100;
Ähhh... :?: Hab ich da was verpasst, oder was soll daran so aufregend anders sein ?

Catweasel


Alni - Mi 11.02.04 00:15

Ich nehm einfach mal an er will die 2 Nachkommastellen haben egal ob sie 00 sind oder nicht. Deshalb würde ich die 2.Variante von Gausi verwenden und falls die Zahlen ausgegeben werden sollen einfach mit:

Delphi-Quelltext
1:
edit1.text:=FloatToStrF(zahl,ffFixed,2,2);                    


auf 2 stellen formatieren dann gibt er auch 3,00 aus

Ach ja er sollte es eigentlich so machen wie Keldorn da ja random(300) nur Zahlen bis 299 liefert

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt


flowstar - Mi 11.02.04 00:22

danke für die Hilfe
habs jetzt auch so ähnlich gemacht, dachte es geibt sowas wie randomFloat(-3.0,3.0)


catweasel - Mi 11.02.04 00:32

Zitat:
habs jetzt auch so ähnlich gemacht, dachte es geibt sowas wie
randomFloat(-3.0,3.0)


Naja spätestens jetzt gibts die wohl..:
(Ungetestet auf die Schnelle):


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
function randomfloat(sr,ur:integer):real;
var
range : integer;
begin
range := max(sr,ur)-min(sr,ur);
result := (random(range)-sr) / 100;
end;


Einmal geschrieben.. immer parat ;-)

Catweasel


flowstar - Mi 11.02.04 01:03

bei mir gibts die jetzt auch seit heute


Delete - Mi 11.02.04 21:36

Moin erstmal, war bisher eher bei SwissdelphiCenter aktiv, aber jetzt hab ich das Forum entdeckt, das mir auch sehr gut gefällt.
Hoffe mir wird immer geholfen, wenn ich mal eine Frage haben sollte.


Random übergibt, ohne Parameter aufgerufen, schon einen Fließkommawert zwischen 0 und 1.

=>

Quelltext
1:
2:
3:
4:
function randomfloat(sr,ur:single):single; 
begin 
 Result:=sr+random*(ur-sr);
end;


catweasel - Mi 11.02.04 22:51

Zitat:
Moin erstmal, war bisher eher bei SwissdelphiCenter aktiv, aber jetzt hab ich das Forum entdeckt, das mir auch sehr gut gefällt.


Na dann mal Herzlich Willkommen... :-)
(Obwohl das eher Tino als "Gastgeber" sagen sollte ;-) )

Zitat:
Hoffe mir wird immer geholfen, wenn ich mal eine Frage haben sollte.

Na ich denke hier wird keiner aus Boshaftigkeit schweigen :-)

Zitat:
Random übergibt, ohne Parameter aufgerufen, schon einen Fließkommawert zwischen 0 und 1


Und wieviel Dezimalstellen hat der ?

Catweasel


Anonymous - Mi 11.02.04 22:55

Maximal 18, so wies aussieht


Delete - Mi 11.02.04 23:15

Also Übergeben wird es ja direkt über den FPU stack, sprich maximal als extended.
Je nach dem, welche Konstanten jetzt die random Funktion verwendet, sind mehr oder weniger Stellen davon wirklich gut durchmischt. Ändern tun sich aber alle Stellen bei jedem Aufruf.

Random mit Parameter multipliziert eigentlich auch den übergebenen Integer mit diesem Wert und rundet dann.