![]() |
Dividieren durch gebrochene Zahlen
ich möchte gerne durch gebrochne Zahlen dividieren.
Bsp: 56654 / 35.456 = 1597,86 Ist der Algo so richtig?
Delphi-Quellcode:
oder kann man den noch verbessern?
function real_teilen(valueue1: real; value2: real): real;
var x, y, z: real; begin x := value / value2; y := x * 100; z := int(trunc(y)); z := z / 100; result := z; end; |
Re: Dividieren durch gebrochene Zahlen
valueue1 würde ich noch durch value1 ersetzen
ich hätts so gemacht:
Delphi-Quellcode:
als code also:
trunc((value1/ value2) * 100) / 100
Delphi-Quellcode:
function real_teilen(value1: real; value2: real): real;
begin result := trunc((value1 / value2) * 100) / 100; end; |
Re: Dividieren durch gebrochene Zahlen
außerdem kannst du zusammenfassen: (selber typ!)
Delphi-Quellcode:
function real_teilen(value1, value2: real): real;
|
Re: Dividieren durch gebrochene Zahlen
Du willst offenbar auf 2 Stellen nach dem Komma runden, was Geldwerte vermuten lässt. Dafür eignet sich der Typ Currency ganz gut, da er intern auf Ganzzahlen basiert, und somit die bei Gleitkommawerten unvermeidlichen Rundungsfehler umgeht.
Alternativ kannst du auch selber intern immer mit den Werten mal 100 rechnen, und dann mit Ganzzahltypen, und nur für die Ausgabe durch 100 teilen um das Komma zu erhalten (oder gar per Stringoperationen einfügen). Gleitkomma geht auch, aber rechne nicht damit bei 2.95/1.59 nachher genau 1.85 zurück zu bekommen. Du wirst nämlich bereits bei deinen Eingangszahlen sowas wie 2.9499999994 und 1.5900000000021 im Speicher haben, und etwas wie 1.850000013 als Ergebnis. Das liegt an der prinzipiellen Funktionsweise von Floats, und ist mit trunc(x*100)/100 nicht abstellbar. Merken wirst du das zwar erst, wenn du ein paar Millionen Mal irgendwelche Rechungen durchgeführt hast, aber ich halte es für wichtig diesen Umstand immer im Hinterkopf zu haben. Bei Festkommawerten (Anzahl Stellen nach dem Komma fix) lohnt es sich eigentlich immer intern mit skalierten Ganzzahlen zu rechnen. Allein schon, weil Ganzzahlarithmetik schneller von statten geht. Gruss, Fabian |
Re: Dividieren durch gebrochene Zahlen
Hi
Wie wär's mit einer simplen z:=x/y - Lösung und zum Darstellen FormatFloat('#0.00',z); ? Rechenzeiten sollten an dieser Stelle glaub ich nicht unbedingt erwähnt werden.... :zwinker: Gruß oldmax |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 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