Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Formatfunktion würfelt die Datentypen wahllos zusammen (https://www.delphipraxis.net/108245-formatfunktion-wuerfelt-die-datentypen-wahllos-zusammen.html)

grenzgaenger 9. Feb 2008 18:37


Formatfunktion würfelt die Datentypen wahllos zusammen
 
Hallo zusammen,

ich habe folgenden code
Delphi-Quellcode:
    ePercent.Text := format('%.3f', [(eHigh.value
                                         / items[0].Price
                                         * 100)]) + '%';
wobei eHigh = 625 ist und price = 413. herrauskommen sollte nach adam riesse 151,332%

was kommt raus? '-58064811854291,560%' ich seh den wald vor lauter bäumen nciht mehr... wo liegt der hund begraben, sieht ihn jemand? :gruebel: :gruebel:

taaktaak 9. Feb 2008 18:41

Re: Format! Bin ich blöd?
 
Moin, Moin,

muss nicht die Klammer anders gesetzt werden?

(eHigh.value / items[0].Price) * 100

inherited 9. Feb 2008 18:43

Re: Format! Bin ich blöd?
 
Von welchem Typ sind die beiden Variablen?
@taaktaak: Sollte eigentlich auch ohne diese Klammern funktionieren.

turboPASCAL 9. Feb 2008 18:43

Re: Format! Bin ich blöd?
 
k. A. was du da machst, bei mir hauts hin.

Delphi-Quellcode:
... := format('%0.3f %%', [(eHigh.value / items[0].Price) * 100]);

grenzgaenger 9. Feb 2008 18:47

Re: Format! Bin ich blöd?
 
hab jetzt die klammer entfernt, das ergebnis ist das selbe :(

Delphi-Quellcode:
ePercent.Text := format('%.3f', [eHigh.value
                                         / items[0].Price
                                         * 100]) + '%';

taaktaak 9. Feb 2008 18:47

Re: Format! Bin ich blöd?
 
@inherited
ja, du hast Recht Divisíon und Multiplikation sind ja gleichwertig, also wird von links nach rechts aufgelöst ...

taaktaak 9. Feb 2008 18:48

Re: Format! Bin ich blöd?
 
@grenzgaenger - die NULL vor dem . macht vielleicht den Unterschied ??!!

grenzgaenger 9. Feb 2008 18:48

Re: Format! Bin ich blöd?
 
Zitat:

Zitat von turboPASCAL
k. A. was du da machst, bei mir hauts hin.

Delphi-Quellcode:
... := format('%0.3f %%', [(eHigh.value / items[0].Price) * 100]);

tja, bei mir mag er nicht... dabei hab ich nur das 1. und 2. glied getauscht... seitdem funzt es nicht mehr...

grenzgaenger 9. Feb 2008 18:50

Re: Format! Bin ich blöd?
 
Zitat:

Zitat von taaktaak
@grenzgaenger - die NULL vor dem . macht vielleicht den Unterschied ??!!

hatte davor die 3 stehen, jetzt die 0 --- '%0.3f%%' , leider ändert sich am ergebnis nichts ...

taaktaak 9. Feb 2008 18:51

Re: Format! Bin ich blöd?
 
Bist du denn sicher, dass die beiden Variablen auch den von dir erwarteten Inhalt haben?

grenzgaenger 9. Feb 2008 18:52

Re: Format! Bin ich blöd?
 
Zitat:

Zitat von inherited
Von welchem Typ sind die beiden Variablen?
@taaktaak: Sollte eigentlich auch ohne diese Klammern funktionieren.

Delphi-Quellcode:
ePercent.Text := format('%.3f', [eHigh.value     //extended
                                 / items[0].Price //currency
                                 * 100]) + '%';
mal davon abgesehen, dürften hier nur die kommastellen verschoben sein...


Zitat:

Zitat von taaktaak
Bist du denn sicher, dass die beiden Variablen auch den von dir erwarteten Inhalt haben?

yep, bin ich. da ich da mit dem debugger drauf stand... aber was rauskommt ist einfach ein quatsch von einer %-zahl...

[edit=SirThornberry]Beiträge zusammengeführt - Mfg, SirThornberry[/edit]

SirThornberry 9. Feb 2008 18:55

Re: Format! Bin ich blöd?
 
Könntest du dem Beitrag bitte einen aussagekräftigen Namen geben? "Format" sagt so gut wie nicht aus worum es bei deinem Problem geht.

taaktaak 9. Feb 2008 18:58

Re: Format! Bin ich blöd?
 
Tja, ich habe das jetzt auch mal "nachgestellt"...

Delphi-Quellcode:
var a,b : Integer;

a:=600;
b:=400;
showmessage(format('%0.3f',[a/b*100])+'%');
Bei mir zeigt er 150,000% an - so wie es sein soll

grenzgaenger 9. Feb 2008 19:07

Re: Format! Bin ich blöd?
 
Zitat:

Zitat von taaktaak
Tja, ich habe das jetzt auch mal "nachgestellt"...

Delphi-Quellcode:
var a,b : Integer;

a:=600;
b:=400;
showmessage(format('%0.3f',[a/b*100])+'%');
Bei mir zeigt er 150,000% an - so wie es sein soll

theoretisch, sollt es so funktionieren, wie bei dir ... nur schafft das mein delphi nich...

daher hab ich jetzt eine funktion erstellt ...

Delphi-Quellcode:
 function _percent(value, base: double): string;
 begin
   result := format('%.3f%%',[value / base * 100]);
 end;
wenn ich dieser die variablen übergebe, funzt es... :shock: :shock: :shock:

tja, was soll man dazu noch sagen... :drunken: :drunken: :drunken:

alzaimar 9. Feb 2008 20:08

Re: Format! Bin ich blöd?
 
Zitat:

Zitat von grenzgaenger
theoretisch, sollt es so funktionieren, wie bei dir ... nur schafft das mein delphi nich...

Du weisst, das das Problem nicht Delphi ist, sondern davor sitzt. :zwinker:

Hawkeye219 9. Feb 2008 20:27

Re: Formatfunktion würfelt die Datentypen wahllos zusammen
 
Hallo,

meiner Meinung nach ist in diesem Fall der Delphi-Compiler das Problem. Der wird nämlich durch die MixedMode-Operation (Currency und Extended) innerhalb der Format-Funktion offenbar so irritiert, dass er für den Ausdruck sowohl einen falschen Datentyp ermittelt als auch einen fehlerhaften Code erzeugt. Eine kleine Anpassung und Umstellung der Operanden liefert das erwartete Resultat:

Delphi-Quellcode:
ePercent.Text := format('%.3f', [(100.0 / items[0].Price * eHigh.value)]) + '%';
Auch die Berechnung außerhalb der Format-Funktion liefert mit dem Original-Ausdruck das richtige Resultat.

Gruß Hawkeye


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