Typenumwandlung Integer in Float?

Anfängerfragen zum Programmieren mit PureBasic.
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Typenumwandlung Integer in Float?

Beitrag 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.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Typenumwandlung Integer in Float?

Beitrag 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 
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Typenumwandlung Integer in Float?

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: Typenumwandlung Integer in Float?

Beitrag von SebastianJu2 »

Danke... :)
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: Typenumwandlung Integer in Float?

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Typenumwandlung Integer in Float?

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
SebastianJu2
Beiträge: 180
Registriert: 24.09.2010 10:39

Re: Typenumwandlung Integer in Float?

Beitrag 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.
Antworten