Float to Integer Conversion
Float to Integer Conversion
Hallo,
das scheint mir eine rechte Einsteigerfrage zu sein, aber ich finde keinen brauchbaren Hinweis...
Eine Funktion à la "FloatToInt()" finde ich nicht...
Timer1.Interval:= StrToInt(FloatToStr(StrToFloat(FInterval.Text)*1000));
kann's ja wohl nicht sein, oder etwa doch?
Wie bestimme ich dann ob es ein 1, 2, 4, 8 Byte Integer wird?
Danke für einen Link!
das scheint mir eine rechte Einsteigerfrage zu sein, aber ich finde keinen brauchbaren Hinweis...
Eine Funktion à la "FloatToInt()" finde ich nicht...
Timer1.Interval:= StrToInt(FloatToStr(StrToFloat(FInterval.Text)*1000));
kann's ja wohl nicht sein, oder etwa doch?
Wie bestimme ich dann ob es ein 1, 2, 4, 8 Byte Integer wird?
Danke für einen Link!
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2816
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Float to Integer Conversion
Eine echte FloatToInt - Methode gibt es nicht. Eine verlustlose Konvertierung wäre ja auch nicht möglich.
Aber du hast zur Verfügung:
Aber du hast zur Verfügung:
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Beiträge: 726
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: Float to Integer Conversion
Es wird genauso groß wie die Größe der Variable auf der linken Seite. Wenn du Bestimmen willst wieviel Byte deine Variable sein soll, dann must du passende Variablentyp nehmen.Theozh hat geschrieben:Hallo,
Wie bestimme ich dann ob es ein 1, 2, 4, 8 Byte Integer wird?
Integer ist systemabhängig bei 32Bit System 32Bit groß (=4 Byte); bei 64Bit System 64Bit (=8Byte).
z.B:
b: byte;
i: integer;
i:=257;
b:=i; //b=1 weil unteren 8Bits(1Byte) benutzt werden.
Hier hast du Infos über die Zahlentypen und Größen:
http://www.freepascal.org/docs-html/ref/refsu5.html
http://www.freepascal.org/docs-html/ref ... 310003.1.2
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2816
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Float to Integer Conversion
Dabei noch aufpassen, dass die Bereichsprüfung nicht angeschaltet wird (-Cr bzw. Projekt -> Projekteinstellungen -> Codegenerierung -> Bereich). Ansonsten gibt es einen Fehler.Soner hat geschrieben:Code: Alles auswählen
b: byte; i: integer; i:=257; b:=i; //b=1 weil unteren 8Bits(1Byte) benutzt werden.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
-
- Beiträge: 134
- Registriert: So 30. Nov 2008, 21:53
Re: Float to Integer Conversion
Das stimmt ganz und gar nicht. Die Größe ist im wesentlichen vom Compiler-Compatibilitymode via {$MODE} oder Kommadozeilenparameter -Sd, -S2 etc abhängig: Im Standard FPC Modus ist selbst für ein 64-Bit-Programm unter 64-Bit-OS ein integer 16 Bit groß, im Delphi- oder OBJFPC-Modus dann 32 Bit, und (soweit ich weiß) niemals 64 Bit!Soner hat geschrieben:Integer ist systemabhängig bei 32Bit System 32Bit groß (=4 Byte); bei 64Bit System 64Bit (=8Byte).
-
- Beiträge: 726
- Registriert: Do 27. Sep 2012, 00:07
- OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
- CPU-Target: x86_64-win64
- Wohnort: Hamburg
Re: Float to Integer Conversion
Ich hatte gelernt dass Integer-Größe bei Delphi/Pascal, C/C++(int) immer von irgendetwas abhängig ist. Entweder wird es per Default (nach Gusto von Compilerhersteller) oder meistens durch CPUMode gesetzt wird. Und wenn man feste Größen haben will soll man Typen verwenden die immer definierte Größe haben, die unabhängig von Prozessor und Bestriebssystem immer gleich groß sind.indianer-frank hat geschrieben:Das stimmt ganz und gar nicht. Die Größe ist im wesentlichen vom Compiler-Compatibilitymode via {$MODE} oder Kommadozeilenparameter -Sd, -S2 etc abhängig: Im Standard FPC Modus ist selbst für ein 64-Bit-Programm unter 64-Bit-OS ein integer 16 Bit groß, im Delphi- oder OBJFPC-Modus dann 32 Bit, und (soweit ich weiß) niemals 64 Bit!Soner hat geschrieben:Integer ist systemabhängig bei 32Bit System 32Bit groß (=4 Byte); bei 64Bit System 64Bit (=8Byte).
In der fpc-Dokumentation was ich oben als Link angegeben habe steht:
...
Code: Alles auswählen
Type Range Size in bytes
Smallint -32768 .. 32767 2
Integer either smallint or longint size 2 or 4
Longint -2147483648 .. 2147483647 4
..
Lazarus Programme werden immer in objfpc-Modus compiliert sofern man es nicht selber ändert. Es steht am Anfang von Units immer:
{$mode objfpc}
Vielleicht habe ich falsch verstanden.
-
- Beiträge: 7
- Registriert: Di 14. Mai 2013, 09:10
- OS, Lazarus, FPC: Windows 7 (L 1.0.10 FPC 2.6.2)
- CPU-Target: 64Bit
Re: Float to Integer Conversion
Um zu schauen wie das der eigener Compiler regelt, kann man doch sizeof (Funktion?) benutzen.
Mein Windows7 ist 64bit, Lazarus/FPC jedoch 32bit. Demnach nimmt ein integer bei mir 4 Byte ein.
Code: Alles auswählen
program Project1;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes,
{ you can add units after this }
SysUtils;
begin
writeln('Integer : ' + IntToStr(sizeof(integer)) + ' Byte. ');
writeln('Real : ' + FloatToStr(sizeof(real)) + ' Byte. ');
readln;
end.
Re: Float to Integer Conversion
Das hört sich jetzt so an, als sein Integer nur 4 Byte weil Dein Lazarus mit 32 Bit arbeitet und es 8 Byte wären, wenn Lazarus 64 Bit hätte.ViNic hat geschrieben:Mein Windows7 ist 64bit, Lazarus/FPC jedoch 32bit. Demnach nimmt ein integer bei mir 4 Byte ein.
Dies ist aber nicht der Fall. Auf Debian64 mit Lazarus64 verbleibt ein Integer bei 4 Byte Länge. Ganz so wie es auch dokumentiert ist.
-
- Beiträge: 7
- Registriert: Di 14. Mai 2013, 09:10
- OS, Lazarus, FPC: Windows 7 (L 1.0.10 FPC 2.6.2)
- CPU-Target: 64Bit
Re: Float to Integer Conversion
Stimmt. Ich habe es jetzt auch mit 64bit Lazarus und Linux64bit ausprobiert. Es sind 4 Byte.
-
- Beiträge: 565
- Registriert: So 26. Aug 2012, 09:03
- OS, Lazarus, FPC: Windows(10), Linux(Arch)
- CPU-Target: 64Bit
Re: Float to Integer Conversion
gibt es auch etwas wie das hier:
oder müsste man sich das selber basteln?
MFG
Komoluna
Code: Alles auswählen
cutfloat(123.54328,3) //result = 123.543
cutfloat(14.28354,2) //result = 14.24
MFG
Komoluna
Programmer: A device to convert coffee into software.
Rekursion: siehe Rekursion.
Rekursion: siehe Rekursion.
Re: Float to Integer Conversion
das habe ich gefunden...
Code: Alles auswählen
FormatFloat('#.###',123.54328) // ergibt 123.543