Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi RoundTo bei 0 ist nicht 0,00 :( (https://www.delphipraxis.net/66967-roundto-bei-0-ist-nicht-0-00-a.html)

Karstadt 7. Apr 2006 08:48


RoundTo bei 0 ist nicht 0,00 :(
 
Hallo. Wie kann ich die Zahl 0 als 0,00 darstellen ? Danke

Angel4585 7. Apr 2006 08:50

Re: RoundTo bei 0 ist nicht 0,00 :(
 
schau dir mal den Befehl "Format" an:
Delphi-Quellcode:
Format('%7.2f',[0]);

DevilsCamp 7. Apr 2006 08:58

Re: RoundTo bei 0 ist nicht 0,00 :(
 
Zitat:

Zitat von Angel4585
schau dir mal den Befehl "Format" an:
Delphi-Quellcode:
Format('%7.2f',[0]);

Damit hättest du aber 3 Leerzeichen vor deinem String.

Besser ist:
Delphi-Quellcode:
Format('%0.2f', [0]);
Dann sind keine Leerzeichen davor und es wird trotzdem 0,00 (oder 0.00 je nach Einstellung von Windows) ausgegeben

Angel4585 7. Apr 2006 09:01

Re: RoundTo bei 0 ist nicht 0,00 :(
 
Oder:
Delphi-Quellcode:
Trim(Format('%7.2f',[0]));
damit gehts auch :stupid:

DevilsCamp 7. Apr 2006 09:09

Re: RoundTo bei 0 ist nicht 0,00 :(
 
Klar, aber die Frage was schneller ist, solltest du selber beantworten können ;)

Hawkeye219 7. Apr 2006 21:52

Re: RoundTo bei 0 ist nicht 0,00 :(
 
Die Beispiele mit dem konstanten Wert 0 würden leider nicht funktionieren, da die Format-Funktion eine kleine Falle enthält. Bei der Übergabe der Werte muß sehr genau darauf geachtet werden, daß der Datentyp des Werts zum zugehörigen Platzhalter im Formatstring paßt. In diesem Fall ist das nicht so: Im Formatstring steht ein Float-Platzhalter, übergeben wurde ein Integer-Wert. Das Ergebnis ist ein Laufzeitfehler!

Richtig wäre somit:

Delphi-Quellcode:
Format('%0.2f', [0.0]);
Bei der Übergabe von Integer-Variablen kann man den Wert durch eine (ansonsten unsinnige) Multiplikation mit 1.0 konvertieren:

Delphi-Quellcode:
Format('%0.2f', [1.0 * IntWert]);
Das Format "%n", mit dem große, ganzzahlige Werte durch das Einfügen von Tausendertrennzeichen etwas lesbarer gestaltet werden können, erwartet übrigens ebenfalls einen Real-Wert.

Als Alternative zur Format-Funktion bietet sich die Funktion FormatFloat aus der Unit SysUtils an.

Gruß Hawkeye

alzaimar 7. Apr 2006 22:00

Re: RoundTo bei 0 ist nicht 0,00 :(
 
Zitat:

Zitat von DevilsCamp
Klar, aber die Frage was schneller ist, solltest du selber beantworten können ;)

Ach so, es geht gar nicht um korrekte Darstellung, sondern um Performance?

Erster!
Delphi-Quellcode:
MyString := '0,00';
Schneller gehts nicht!

Hawkeye219 7. Apr 2006 22:03

Re: RoundTo bei 0 ist nicht 0,00 :(
 
Streber! :mrgreen:

SirThornberry 7. Apr 2006 22:18

Re: RoundTo bei 0 ist nicht 0,00 :(
 
es gibt auch noch die Funktion FormatFloat. Der übergibt man einfach als Format "0.00" und als zweiten Parameter die Zahl (in diesem Fall 0) und schon passt alles. da braucht man sich auch nicht drum kümmern ob der zweite Parameter ein Float oder Integer ist etc.

Hawkeye219 7. Apr 2006 22:23

Re: RoundTo bei 0 ist nicht 0,00 :(
 
*räusper*

Beitrag #6, ziemlich weit unten :wink:

SirThornberry 7. Apr 2006 22:27

Re: RoundTo bei 0 ist nicht 0,00 :(
 
was soll ich dazu noch sagen :oops: Ich bin eben ein schlechtes Beispiel wie es nicht sein sollte. Es wäre wohl doch besser wenn man alle Beiträge vollständig durchliest und diese nicht nur überfliegt.

DevilsCamp 8. Apr 2006 07:35

Re: RoundTo bei 0 ist nicht 0,00 :(
 
Zitat:

Zitat von alzaimar
Zitat:

Zitat von DevilsCamp
Klar, aber die Frage was schneller ist, solltest du selber beantworten können ;)

Ach so, es geht gar nicht um korrekte Darstellung, sondern um Performance?

Erster!
Delphi-Quellcode:
MyString := '0,00';
Schneller gehts nicht!

nun ja, solange man das Programm auf einem Rechner laufen lässt, bei dessen Ländereinstellungen das Dezimaltrennzeichen ein Komma ist.
Was aber, wenn es ein Punkt sein soll?


Zitat:

Zitat von Hawkeye219
*räusper*

Beitrag #6, ziemlich weit unten :wink:

Stimmt, hast Recht :)

Angel4585 8. Apr 2006 07:48

Re: RoundTo bei 0 ist nicht 0,00 :(
 
Zitat:

Zitat von SirThornberry
was soll ich dazu noch sagen :oops: Ich bin eben ein schlechtes Beispiel wie es nicht sein sollte. Es wäre wohl doch besser wenn man alle Beiträge vollständig durchliest und diese nicht nur überfliegt.

*aufdiesculterklopf* ich weis genau wie du dich fühlst :roll:

alzaimar 8. Apr 2006 08:23

Re: RoundTo bei 0 ist nicht 0,00 :(
 
Zitat:

Zitat von "alzaimar
Erster!
Delphi-Quellcode:
MyString := '0,00';
Schneller gehts nicht!

Zitat:

Zitat von DevilsCamp
nun ja, solange man das Programm auf einem Rechner laufen lässt, bei dessen Ländereinstellungen das Dezimaltrennzeichen ein Komma ist.
Was aber, wenn es ein Punkt sein soll?

Achtung! Ursprungsfrage:
Zitat:

Zitat von Karstadt
Hallo. Wie kann ich die Zahl 0 als 0,00 darstellen ? Danke

:dancer:

DevilsCamp 8. Apr 2006 08:44

Re: RoundTo bei 0 ist nicht 0,00 :(
 
Zitat:

Zitat von alzaimar
Achtung! Ursprungsfrage:
Zitat:

Zitat von Karstadt
Hallo. Wie kann ich die Zahl 0 als 0,00 darstellen ? Danke

:dancer:

Bedenke, dass der Poster 0,00 kennt (und deshalb auch danach gefragt hat).
Was aber wenn das Programm nicht nur von Deutschen sondern z.B. Engländern benutzt werden soll? Oder auf einem Windows läuft, das das englische System eingerichtet hat?

Daher wäre ich mit
Delphi-Quellcode:
MyString := '0,00';
sehr vorsichtig.

mkinzler 8. Apr 2006 09:09

Re: RoundTo bei 0 ist nicht 0,00 :(
 
Zitat:

Was aber wenn das Programm nicht nur von Deutschen sondern z.B. Engländern benutzt werden soll?
dann muß es halt
Delphi-Quellcode:
MyString := '0'+DecimalSeparator+'00';
heißen. Nun sind wir aber schon weit OT ;-)


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