![]() |
Gibt es in Delphi den Datentyp decimal, wie bei c# ?
In C# gibt es den Typ decimal, damit kann man eine Zahl in einer 16-Bytes-Variablen darstellen. Dabei sind die ersten 14 Byte die Mantisse als Integer-Zahl und die höchsten 2 Byte geben die Anzahl Kommastellen an, wobei das höchste Bit das Vorzeichen der decimal-Zahl darstellt.
Man kann also ziemlich große Zahlen darstellen, damit rechnen, in Strings wandeln u.a.m. Bei Delphi habe ich nur int64 (8 Bytes) als grösste mögliche int-Zahl gefunden. Delphi max-hex = 7F FF FF FF FF FF FF FF ( int 64 Bits) C# max-hex = 7F FF FF FF FF FF FF FF FF FF FF FF FF FF ( int 112 bits ) Gibt es inzwischen auch die Möglichkeit einer int-Zahl mit 112 Bits ? ![]() |
AW: Gibt es in Delphi den Datentyp decimal, wie bei c# ?
Hallo Hartmut,
versuch es mal mit der Multipräzisions-Arithmetik-Bibliothek MPArith 1.39.12 von Wolfgang Ehrhardt: ![]() Es ist allerdings die allerletzte Version von ihm (= Gammatester in unserem Forum), da er Anfang des Jahres leider verstorben ist. Ich benutze seine Routinen seit langem mit großem Erfolg, die eine nahezu beliebige Anzahl an Nachkommastellen (bis in die Millionen) ermöglichen. Gruß Andreas |
AW: Gibt es in Delphi den Datentyp decimal, wie bei c# ?
Zitat:
Kann man ![]() Momentan nur eine 32-bit version (mit viel assembler, daher schnell), aber die 64 bit-Version wird in einigen Tagen online gestellt. Und ich arbeite an einer PURE-PASCAL-Version (also ohne Assembler) für andere Plattformen als Windows. Übrigens, nur 96 bit eines C#-Decimal (12 byte) sind "Mantisse". Das zeigt die ![]() Zitat:
![]() ![]() |
AW: Gibt es in Delphi den Datentyp decimal, wie bei c# ?
Zitat:
Zitat:
![]() |
AW: Gibt es in Delphi den Datentyp decimal, wie bei c# ?
Danke für die vielen Antworten. Ich habe mit einem kleinen C#-Testprogramm versucht festzustellen, wie die Struktur der decimal-Variablen ist.
Hier der Code und das Ergebnis in einer Testdatei
Code:
Bei der Variablen d3 = 1/3, also ein Endlosbruch 0,333..., wird in den ersten 12 Bytes die Mantisse und in den letzten 2 Byte werden Anzahl Kommastellen und Vorzeichen gespeichert. Die Bytes 13 und 14 sind immer 00 00. Deren Bedeutung hab ich nicht nicht erkannt, evtl. nur Füllbytes, damit die decimal-Variable insgesamt 16 Bytes groß ist.
FileStream fileStr = new FileStream(@"Y:\HkTestDECIMAL.xyz",FileMode.Create);
BinaryWriter binWriter = new BinaryWriter(fileStr); decimal d1 = 123.4567890123m; decimal d2 = -1000000000.00m; decimal d3 = 1m / 3m; double r3 = 123.4567890123; binWriter.Write(d1); binWriter.Write(d2); binWriter.Write(d3); binWriter.Write(r3); binWriter.Close(); 0000: CB 04 FB 71 1F 01 00 00 00 00 00 00 00 00 0A 00 decimal d1 = 123.4567890123m; ------------------------------------- ===== ~~~~~ | | | +-------- 10 Kommastellen / Vorzeichen + ( 0 000A ) +----------------------------------------------------- Hex 011F71FB04CB = Dez 1234567890123 0010: 00 E8 76 48 17 00 00 00 00 00 00 00 00 00 02 80 decimal d2 = -1000000000.00m; ------------------------------------- ===== ~~~~~ | | | +-------- 2 Kommastellen / Vorzeichen - ( 1 0002) +----------------------------------------------------- Hex 174876E800 = Dez 100000000000 0020: 55 55 55 05 CB 00 B7 14 CA 44 C5 0A 00 00 1C 00 decimal d3 = 1m / 3m; ------------------------------------- ===== ~~~~~ | | | +-------- 28 Kommastellen / Vorzeichen + ( 0 001C) +----------------------------------------------------- Hex 0AC544CA14B700CB05555555 = Dez 33333...(28 x 3) 0030: 0B 40 FB 07 3C DD 5E 40 double r3 = 123.4567890123; Rudy, Deine Version habe ich mir heruntergeladen und werde sie mal probieren. Danke für den Link. |
AW: Gibt es in Delphi den Datentyp decimal, wie bei c# ?
@Rudy Velthuis
Hallo Rudy, Deine Routinen in DecimalsDevelop.dpr (Stand: 16.06.2010), enthalten im aktuellen decimals.zip lassen sich mit meinem Delphi XE5 Professional NICHT (mehr) kompilieren... Hast Du evt. eine aktualisierte Version? Danke + Gruß Andreas |
AW: Gibt es in Delphi den Datentyp decimal, wie bei c# ?
Zitat:
Werde heute Abend noch eine verbesserte Version hochladen. |
AW: Gibt es in Delphi den Datentyp decimal, wie bei c# ?
Zitat:
|
AW: Gibt es in Delphi den Datentyp decimal, wie bei c# ?
@Rudy Velthuis
Danke Rudy für Deine prompte Hilfe! Gruß Andreas |
AW: Gibt es in Delphi den Datentyp decimal, wie bei c# ?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 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 by Thomas Breitkreuz