AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Gibt es in Delphi den Datentyp decimal, wie bei c# ?
Thema durchsuchen
Ansicht
Themen-Optionen

Gibt es in Delphi den Datentyp decimal, wie bei c# ?

Ein Thema von kwhk · begonnen am 5. Mai 2019 · letzter Beitrag vom 7. Jan 2020
 
Benutzerbild von kwhk
kwhk

Registriert seit: 25. Mär 2009
Ort: Dresden
168 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Gibt es in Delphi den Datentyp decimal, wie bei c# ?

  Alt 6. Mai 2019, 09:06
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:
  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;
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.

Rudy, Deine Version habe ich mir heruntergeladen und werde sie mal probieren. Danke für den Link.
Hartmut

Geändert von kwhk ( 6. Mai 2019 um 09:19 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 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