![]() |
Passenden Datentypen gesucht
Hallo,
ich suche gerade einen Datentypen für Zahlen. Er muss aber möglichst viele Ziffern vor dem Komma aufnehmen können, aber nach dem Komma reichen zwei. Welchen würdet ihr mir empfehlen? Danke schonmal im voraus |
AW: Passenden Datentypen gesucht
Code:
Quelle:
Type Storage size Range
Byte 1 0 to 255 ShortInt 1 -127 to 127 Word 2 0 to 65,535 SmallInt 2 -32,768 to 32,767 LongWord 4 0 to 4,294,967,295 Cardinal 4* 0 to 4,294,967,295 LongInt 4 -2,147,483,648 to 2,147,483,647 Integer 4* -2,147,483,648 to 2,147,483,647 Int64 8 -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 Single 4 7 significant digits, exponent -38 to +38 Currency 8 50+ significant digits, fixed 4 decimal places Double 8 15 significant digits, exponent -308 to +308 Extended 10 19 significant digits, exponent -4932 to +4932 * Note : the Integer and Cardinal types are both 4 bytes in size at present (Delphi release 7), but are not guaranteed to be this size in the future. All other type sizes are guaranteed. ![]() Currency? |
AW: Passenden Datentypen gesucht
Fixed-point.
Also wenn es dir um zwei Nachkommastellen im Dezimalsystem geht, speichert du einfach "hundertstel" ab. Bei der Anzeige fügst du dann das Komma ein. Der Basis-Datentyp kann dann Integer sein oder Int64. |
AW: Passenden Datentypen gesucht
Danke für die Antworten. Ich werde mal sehen, welchen ich benutze. Ich habe garnicht damit gerechnet, dass die ersten Antworten so früh kommen. Danke dafür.:thumb:
|
AW: Passenden Datentypen gesucht
Currency ist naheliegend, hat aber teilweise Schwächen, bedingt durch
![]()
Delphi-Quellcode:
program Project14358407;
{$APPTYPE CONSOLE} var C: Currency; begin C := 1.32; if C <> 1.32 then begin WriteLn('strange'); end; ReadLn; end. |
AW: Passenden Datentypen gesucht
Das ist aber keine Spezialität von Currency.
Ein Vergleich von
Delphi-Quellcode:
wird außer bei Extended und Variant immer anschlagen single,real,double ....
if C <> 1.32 then
|
AW: Passenden Datentypen gesucht
Zitat:
![]() |
AW: Passenden Datentypen gesucht
Deshalb gibt es ja die Funktion
![]()
Delphi-Quellcode:
if CompareValue(1.32, C, 0.005) <> EqualsValue then
Writeln('Arrrr'); |
AW: Passenden Datentypen gesucht
Alles Falsch. :-)
Currency heißt nicht umsonst Currency. Das soll *genau* rechnen können. Ich kauf mir doch keinen Ferarri, den ich dann vom Pferd ziehen lasse.. :stupid: Eigentlich ist Currency ein Int64, allerdings um 4 Dezimalstellen nach links geschoben. Und da die Umsetzung von Int64 im Compiler meines Wissens nach nicht 100% korrekt ist, kann es zu Problemen führen (zumindest früher) Beweis:
Delphi-Quellcode:
Mit Currency sind also 14 Stellen vor dem Komma (und 4 danach) darstellbar.
Program CurrencyIsInt64;
Var c : Currency; i : Int64 absolute c; begin writeln(c); writeln(i); end. Alternativen wären Klassen, wie TBigNum oder BigInt. Beides zu ergoogeln oder zu erdepelen ("in der DP suchen") TBCD geht auch, ist aber im Wertebereich beschränkt und erst in "neueren" Versionen vorhanden(?) Nebenbei: Zitat:
Beweis:
Delphi-Quellcode:
Merke: Floating Point ist schnell, aber nicht genau.
Var
e,e1 : Extended; begin e := 0; repeat e1 := e; e := e+0.1; until e-e1<>0.1; writeln(FloatToStr(r)); end. |
AW: Passenden Datentypen gesucht
Ich vergleiche immer ganz gerne mit einer eigenen Funktion, der ich noch einen Tolleranz-Wert mit übergebe . Grüße
Delphi-Quellcode:
function IsAboutEqual(Zahl1, Zahl2 : Double; Tolleranz : Integer) : Boolean;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz