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
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von kwhk
kwhk

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

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

  Alt 5. Mai 2019, 18:42
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 ?

https://docs.microsoft.com/de-de/dot...ywords/decimal
Hartmut
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
721 Beiträge
 
Delphi XE5 Professional
 
#2

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

  Alt 5. Mai 2019, 18:59
Hallo Hartmut,

versuch es mal mit der Multipräzisions-Arithmetik-Bibliothek MPArith 1.39.12 von Wolfgang Ehrhardt:

https://sslsites.de/wolfgang-ehrhardt.de/index_de.html

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

Geändert von Andreas13 ( 5. Mai 2019 um 19:01 Uhr)
  Mit Zitat antworten Zitat
Rudy Velthuis

Registriert seit: 10. Sep 2011
Ort: Gelsenkirchen
42 Beiträge
 
Delphi 10.3 Rio
 
#3

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

  Alt 5. Mai 2019, 23:11
Hallo Hartmut,

versuch es mal mit der Multipräzisions-Arithmetik-Bibliothek MPArith 1.39.12 von Wolfgang Ehrhardt:

https://sslsites.de/wolfgang-ehrhardt.de/index_de.html
MPArith war einer der Gründe, dass ich meine eigene BigInteger und BigDecimal geschrieben habe.

Zitat:
Es ist allerdings die allerletzte Version von ihm (= Gammatester in unserem Forum), da er Anfang des Jahres leider verstorben ist.
Probiere doch mal meine Implementationen. Können wie einfache Integer benutzt werden (Operator overloading), es gibt allerdings auch viele Methoden. Ist hochoptimiert.
Rudy Velthuis

Geändert von Rudy Velthuis ( 5. Mai 2019 um 23:16 Uhr)
  Mit Zitat antworten Zitat
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, 10: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 10:19 Uhr)
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
721 Beiträge
 
Delphi XE5 Professional
 
#5

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

  Alt 6. Mai 2019, 14:16
@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
  Mit Zitat antworten Zitat
Rudy Velthuis

Registriert seit: 10. Sep 2011
Ort: Gelsenkirchen
42 Beiträge
 
Delphi 10.3 Rio
 
#6

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

  Alt 7. Mai 2019, 19:40
@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
Habe ich gleich ausprobiert. Die unit Console ist nicht notwendig (nur für farbige Ausgabe) und das Problem mit TFormatSettings.

Werde heute Abend noch eine verbesserte Version hochladen.
Rudy Velthuis

Geändert von Rudy Velthuis ( 7. Mai 2019 um 19:50 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.029 Beiträge
 
Delphi 12 Athens
 
#7

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

  Alt 8. Mai 2019, 21:59
Hallo Hartmut,

versuch es mal mit der Multipräzisions-Arithmetik-Bibliothek MPArith 1.39.12 von Wolfgang Ehrhardt:

https://sslsites.de/wolfgang-ehrhardt.de/index_de.html

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
Muss man das dann evtl. irgendwo hin retten (Torry, Jedi...), oder wer finanziert den über den Link angegebenen Webspace?
  Mit Zitat antworten Zitat
jeroenp

Registriert seit: 5. Aug 2010
7 Beiträge
 
Delphi 2 Desktop
 
#8

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

  Alt 5. Jan 2020, 22:17
Hallo Hartmut,

versuch es mal mit der Multipräzisions-Arithmetik-Bibliothek MPArith 1.39.12 von Wolfgang Ehrhardt:

https://sslsites.de/wolfgang-ehrhardt.de/index_de.html

Es ist allerdings die allerletzte Version von ihm (= Gammatester in unserem Forum), da er Anfang des Jahres leider verstorben ist.
Muss man das dann evtl. irgendwo hin retten (Torry, Jedi...), oder wer finanziert den über den Link angegebenen Webspace?
Hoffentlich ist in https://web.archive.org/web/20190328.../index_de.html alles enthalten.

--jeroen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#9

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

  Alt 6. Jan 2020, 02:18
Früher nicht, da nur die Webseite kopiert wurde, aber seit einer Weile werden auch Dateien (ZIPs und Dergleichen) ebenfalls gesichert ... allerdings weiß ich nicht in welchen Umfang die Downloads derzeit gespeichert werden.
(nicht wundern ... auch die robots.txt wird absichtlich von denen ignoriert)

Besser jemand übernimmt das Projekt auf die eigene Webseite, bzw. erstellt für Quellcodes ein Projekt auf github/sourceforge/...
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.108 Beiträge
 
Delphi 2009 Professional
 
#10

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

  Alt 6. Jan 2020, 18:32
archive.org beachtet robots.txt.
Was du meinst, ist archive.is (aka archive.today), das schert sich nicht um Urheberrecht, muss aber manuell angestoßen werden.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:09 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