AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Passenden Datentypen gesucht

Ein Thema von NoNoPe · begonnen am 24. Apr 2013 · letzter Beitrag vom 25. Apr 2013
Antwort Antwort
Seite 1 von 2  1 2      
NoNoPe
(Gast)

n/a Beiträge
 
#1

Passenden Datentypen gesucht

  Alt 24. Apr 2013, 09:34
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
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Passenden Datentypen gesucht

  Alt 24. Apr 2013, 09:41
Code:
 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.
Quelle: DelphiBasics.co.uk

Currency?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

AW: Passenden Datentypen gesucht

  Alt 24. Apr 2013, 09:42
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.
  Mit Zitat antworten Zitat
NoNoPe
(Gast)

n/a Beiträge
 
#4

AW: Passenden Datentypen gesucht

  Alt 24. Apr 2013, 18:41
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.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Passenden Datentypen gesucht

  Alt 24. Apr 2013, 19:02
Currency ist naheliegend, hat aber teilweise Schwächen, bedingt durch Bugs im Compiler. Mit manchen Delphi Versionen liefert dieses Programm die Ausgabe "strange":

Delphi-Quellcode:
program Project14358407;

{$APPTYPE CONSOLE}

var
  C: Currency;
begin
  C := 1.32;

  if C <> 1.32 then
  begin
    WriteLn('strange');
  end;

  ReadLn;
end.
Michael Justin

Geändert von mjustin (24. Apr 2013 um 19:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Passenden Datentypen gesucht

  Alt 24. Apr 2013, 19:34
Das ist aber keine Spezialität von Currency.
Ein Vergleich von
   if C <> 1.32 then wird außer bei Extended und Variant immer anschlagen single,real,double ....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Passenden Datentypen gesucht

  Alt 24. Apr 2013, 19:38
Das ist aber keine Spezialität von Currency.
Laut Barry Kelly ist Currency "not susceptible to precision issues in the same way that floating point code is." (link), insofern ist Currency schon etwas Besonderes. In den meisten Delphi Version liefert der Vergleich auch wie erwartet False.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: Passenden Datentypen gesucht

  Alt 25. Apr 2013, 01:34
Deshalb gibt es ja die Funktion Delphi-Referenz durchsuchenCompareValue:
Delphi-Quellcode:
if CompareValue(1.32, C, 0.005) <> EqualsValue then
   Writeln('Arrrr');
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#9

AW: Passenden Datentypen gesucht

  Alt 25. Apr 2013, 07:58
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..

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:
Program CurrencyIsInt64;
Var
  c : Currency;
  i : Int64 absolute c;

begin
  writeln(c);
  writeln(i);
end.
Mit Currency sind also 14 Stellen vor dem Komma (und 4 danach) darstellbar.

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:
Ein Vergleich von...wird außer bei Extended und Variant immer anschlagen single,real,double ....
Auch falsch. Alles was floating point ist, und dazu gehört auch extended und variant (wenn der einen FP kapselt) sollte *NIE* auf Gleichheit geprüft werden. Es kann funktionieren (und bei Extended ist die Wahrscheinlichkeit größer, das es funktioniert), aber es muss nicht.

Beweis:
Delphi-Quellcode:
Var
  e,e1 : Extended;

begin
  e := 0;
  repeat
    e1 := e;
    e := e+0.1;
  until e-e1<>0.1;
  writeln(FloatToStr(r));
end.
Merke: Floating Point ist schnell, aber nicht genau.

Geändert von Furtbichler (25. Apr 2013 um 08:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#10

AW: Passenden Datentypen gesucht

  Alt 25. Apr 2013, 08:37
Ich vergleiche immer ganz gerne mit einer eigenen Funktion, der ich noch einen Tolleranz-Wert mit übergebe . Grüße
function IsAboutEqual(Zahl1, Zahl2 : Double; Tolleranz : Integer) : Boolean;
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!
  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 14:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz