![]() |
Formatfunktion würfelt die Datentypen wahllos zusammen
Hallo zusammen,
ich habe folgenden code
Delphi-Quellcode:
wobei eHigh = 625 ist und price = 413. herrauskommen sollte nach adam riesse 151,332%
ePercent.Text := format('%.3f', [(eHigh.value
/ items[0].Price * 100)]) + '%'; 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: |
Re: Format! Bin ich blöd?
Moin, Moin,
muss nicht die Klammer anders gesetzt werden? (eHigh.value / items[0].Price) * 100 |
Re: Format! Bin ich blöd?
Von welchem Typ sind die beiden Variablen?
@taaktaak: Sollte eigentlich auch ohne diese Klammern funktionieren. |
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]);
|
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]) + '%'; |
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 ... |
Re: Format! Bin ich blöd?
@grenzgaenger - die NULL vor dem . macht vielleicht den Unterschied ??!!
|
Re: Format! Bin ich blöd?
Zitat:
|
Re: Format! Bin ich blöd?
Zitat:
|
Re: Format! Bin ich blöd?
Bist du denn sicher, dass die beiden Variablen auch den von dir erwarteten Inhalt haben?
|
Re: Format! Bin ich blöd?
Zitat:
Delphi-Quellcode:
mal davon abgesehen, dürften hier nur die kommastellen verschoben sein...
ePercent.Text := format('%.3f', [eHigh.value //extended
/ items[0].Price //currency * 100]) + '%'; Zitat:
[edit=SirThornberry]Beiträge zusammengeführt - Mfg, SirThornberry[/edit] |
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.
|
Re: Format! Bin ich blöd?
Tja, ich habe das jetzt auch mal "nachgestellt"...
Delphi-Quellcode:
Bei mir zeigt er 150,000% an - so wie es sein soll
var a,b : Integer;
a:=600; b:=400; showmessage(format('%0.3f',[a/b*100])+'%'); |
Re: Format! Bin ich blöd?
Zitat:
daher hab ich jetzt eine funktion erstellt ...
Delphi-Quellcode:
wenn ich dieser die variablen übergebe, funzt es... :shock: :shock: :shock:
function _percent(value, base: double): string;
begin result := format('%.3f%%',[value / base * 100]); end; tja, was soll man dazu noch sagen... :drunken: :drunken: :drunken: |
Re: Format! Bin ich blöd?
Zitat:
|
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:
Auch die Berechnung außerhalb der Format-Funktion liefert mit dem Original-Ausdruck das richtige Resultat.
ePercent.Text := format('%.3f', [(100.0 / items[0].Price * eHigh.value)]) + '%';
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