Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Float nachkommastellen abschneiden??? (https://www.delphipraxis.net/28497-float-nachkommastellen-abschneiden.html)

O.T. 25. Aug 2004 13:52


Float nachkommastellen abschneiden???
 
Hi ihr lieben....

Hab ne harte Nuss hier:
Und zwar hab ich n String den ich zum Float-Wert mache....aber ich benötige nur 2 Kommastellen, denn wenn ich z.b. '56.87' (oder ähnlich habe), dann macht Delphi daraus den Wert 56.87000000000017 (Delphi 5). Mit diesem Wert kann ich aber nicht so viel anfangen, da ich ihn in die Datenbank schreiben möchtt und später noch damit weiter rechnen will.

Habs schon so versucht:
Delphi-Quellcode:
trunc((56,78)*100)
und dann wieder durch 100 dividiert, aber auch bei der Division macht Delphi wieder diesen komischen Wert daraus.


Wer kann mir helfen??? Brauch unbedingt den wert mit NUR zwei Kommastellen. :cry:

Danke.

Bye

djmasi 25. Aug 2004 13:57

Re: Float nachkommastellen abschneiden???
 
Nimm die Format-Funktion
Delphi-Quellcode:
  Result := Format('%8.2n', [DeinWert]);

Chewie 25. Aug 2004 13:57

Re: Float nachkommastellen abschneiden???
 
Eleganter wäre Delphi-Referenz durchsuchenFormatFloat.

Matze 25. Aug 2004 13:57

Re: Float nachkommastellen abschneiden???
 
oder so:

Delphi-Quellcode:
Zahl := round(Zahl *10) / 10;
Evtl hilft auch [dp]kaufmännisch runden[/dp]

Nachtrag: 2 Kommastellen natürlich * 100 und dann / 100

xineohp 25. Aug 2004 14:02

Re: Float nachkommastellen abschneiden???
 
moin,

nur um die Frage richtig zu verstehen:

Du hast den String '45,78', wandelst ihn per strtofloat um und erhälst 45.78000000015 ?! Das wäre extrem komisch... :gruebel:

Steve 25. Aug 2004 14:18

Re: Float nachkommastellen abschneiden???
 
Zitat:

Zitat von xineohp
Du hast den String '45,78', wandelst ihn per strtofloat um und erhälst 45.78000000015 ?! Das wäre extrem komisch... :gruebel:

Das is tatsächlich komisch, aber (zumindest bei mir) sofort problemlos reproduzierbar. Mit größerer Abweichung sogar.

Stephan

fiasko 25. Aug 2004 15:12

Re: Float nachkommastellen abschneiden???
 
Das liegt doch daran das hier eine Fließkommazahl abgespeichert wird - da bekommt per Definition nie den genauen Wert hin - da müßtest du schon eine Festkommazahl mit genügend stellen nehmen (z.B. Real) - sowas macht man aber eigentlich nicht mehr.

xineohp 25. Aug 2004 15:15

Re: Float nachkommastellen abschneiden???
 
bei mir nicht! :gruebel:

nailor 25. Aug 2004 15:42

Re: Float nachkommastellen abschneiden???
 
schau dir mal den hier:
Zitat:

Der Typ Currency ist ein Festkomma-Datentyp, der Rundungsfehler in finanzmathematischen Berechnungen minimiert. Er wird als skalierter 64-Bit-Integer gespeichert, bei dem die vier niedrigst wertigen Stellen implizit vier Nachkommastellen repräsentieren. Bei einer Kombination mit anderen reellen Typen in Zuweisungen und Ausdrücken werden Currency-Werte automatisch mit 10000 multipliziert.
an, oder mach das ganze selbst aus einem integer, indem du die einer und zehner als hunderstel und zehntel nimmst

xineohp 25. Aug 2004 18:31

Re: Float nachkommastellen abschneiden???
 
hm,

aber ich verstehe nicht warum, wenn ich einen String in eine Kommazahl umwandle, dabei eine Abweichung auftritt/treten sollte?!

Fossibaer58809 25. Aug 2004 18:55

Re: Float nachkommastellen abschneiden???
 
Gabs da nicht mal ne CPU mit einem Fehler in der Fließkommaeinheit?

Gruß

Michael

nailor 25. Aug 2004 19:52

Re: Float nachkommastellen abschneiden???
 
nein. floats werden dargestellt als (ich kann mich irren, jedenfalls werden nicht die ziffern gespeichert) basis, exponent und so nen kram. und da kann es sein, dass es zahlen gibt, die als ziffern simpel zu notieren sind, aber in der float-schreibweise garnicht darstellbar sind. dann wird halt die nächste darstellbare zahl genommen. und dann kann es schon sein, dass solche fehler entstehn

FAlter 25. Aug 2004 20:12

Re: Float nachkommastellen abschneiden???
 
1. FloatToStrF

2. z. B. periodische Dezimalbrüche, dazu gehört auch 0,01, würden unendlich viel Speicher verbrauchen... --> "binär gerundet" -> andere Zahl

Steve 26. Aug 2004 07:24

Re: Float nachkommastellen abschneiden???
 
Zitat:

Zitat von http://grouper.ieee.org/groups/754/faq.html
General Floating-Point Questions

Why is 0.1 not 0.1?

Binary floating-point numbers consist of signed integers multiplied by powers of two. When fractional, you can also consider them as integers divided by powers of two. The decimal number 0.1, or 1/10, is not an integer over a power of two. The 854 standard encompasses decimal arithmetic, but there is little hardware support outside of desktop calculators.
[...]

Nu alles klar? :zwinker:

Stephan

Cicaro 29. Apr 2011 06:21

AW: Float nachkommastellen abschneiden???
 
Mal ne andere Frage nebenbei: Hat Delphi nicht eine Funktion, mit der man NUR die Nachkommastellen extrahieren kann ? Also aus 15.67 möchte ich nur 0.67 weiterverarbeiten.

//edit: habs schon: Frac aus system.pas macht das.

Bummi 29. Apr 2011 06:26

AW: Float nachkommastellen abschneiden???
 
Frac()


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:25 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