Seite 1 von 1

Typenumwandlung Integer in Float?

Verfasst: 26.02.2011 22:19
von SebastianJu2
Ich habe jetzt eine Weile gesucht aber keine Funktion gefunden um Integer zu einem Float zu wandeln. Ich meine nicht umdefinieren sondern eher so eine Typumwandlung wie Str dass Zahlen zu Strings wandelt.

Ich will eigentlich nur eine Millisekundenzahl als Sekunde darstellen. Vielleicht würde es gehen wenn ich die ms von Anfang an auch als Float definiere aber es muss doch auch möglich sein ein Integer zu einem Float zu verändern.
Alternativ wäre wohl möglich einen String zu erzeugen der die Zahl angibt. Aber das ist sicher nicht optimal.

Ich habe ein wenig getestet ob es mit den Datentypen allein geht aber das Ergebnis ist nicht so wie ich dachte.

Code: Alles auswählen

Procedure ms_to_Second(ms.f)
  ProcedureReturn ms / 2
EndProcedure
Debug ms_to_Second(13) ;ergibt 6

Define.f dd
dd = 13
Debug dd / 2  ;ergibt 6.5

Debug 13 / 2 ;ergibt 6

Define.f dd
Define.l aa
aa = 13
dd = aa
Debug dd / 2 ;ergibt 6.5
Ich übergebe der Prozedur zwar eine Ganzzahl aber die Prozedur sollte es als Float annehmen. Floats dürfen ja auch ganze Zahlen sein. Aber selbst wenn ich 13.5 an die Prozedur übergebe bekomme ich nur ein gerundetes Ergebnis.
Hingegen der zweite Codeteil mit dd als Float ergibt 6.5. Der dritte Codeteil dagegen eine 6. Und beim 4. klappt es wiederum. 6.5 ist das Ergebnis.

Wenn das mit der Prozedur funktionieren würde dann hätte man ja bereits so eine Umwandlungsfunktion wie ich suche bzw man könnte sie sich bauen. Nur irgendwie passt hier noch etwas nicht.

Re: Typenumwandlung Integer in Float?

Verfasst: 26.02.2011 22:31
von ts-soft

Code: Alles auswählen

Procedure.f ms_to_Second(ms.f)
  ProcedureReturn ms / 2
EndProcedure
Debug ms_to_Second(13) ;ergibt 6

Define.f dd
dd = 13
Debug dd / 2  ;ergibt 6.5

Debug 13.0 / 2 ;ergibt 6

Define.f dd
Define.l aa
aa = 13
dd = aa
Debug dd / 2 ;ergibt 6.5 

Re: Typenumwandlung Integer in Float?

Verfasst: 26.02.2011 22:33
von STARGÅTE
Wenn du eine Float zurück geben willst, musst du auch eine Float zurückgeben lassen:

Procedure.f ...

Damit das ProcedureReturn eine Float zurück gibt.

Re: Typenumwandlung Integer in Float?

Verfasst: 26.02.2011 22:34
von SebastianJu2
Danke... :)

Re: Typenumwandlung Integer in Float?

Verfasst: 26.02.2011 22:45
von SebastianJu2
Einfache Typumwandlung könnte dann so aussehen (falls das mal wieder jemand sucht):

Code: Alles auswählen

Procedure.f Long_to_Float(Long.l)
  ProcedureReturn Long
EndProcedure

Re: Typenumwandlung Integer in Float?

Verfasst: 26.02.2011 22:52
von STARGÅTE
Eine Typen-"Umwandlung" erreicht man auch mit *1.0 oder +0.0
dann würde ein Macro (analog zu Int()) reichen:

Code: Alles auswählen

Macro Float(Long)
 ( (Long)*1.0 )
EndMacro

Debug 2/4
Debug Float(2/4)
oder eben gleich Floats nutzen also 2.0/4 oder so

Re: Typenumwandlung Integer in Float?

Verfasst: 26.02.2011 23:07
von SebastianJu2
Danke für den Tip... über Makros hatte ich bisher noch nichts weiter gelesen außer dem Namen aber die sind ja recht interessant... ich hatte mich nämlich schon gefragt ob es in PB etwas ähnliches wie das gibt.