Einzelnen Beitrag anzeigen

Bodenseematze

Registriert seit: 10. Jul 2023
68 Beiträge
 
#6

AW: System.Frac / System.Int / Math.SimpleRoundTo - komische Ergebnisse

  Alt 11. Jul 2023, 08:40
Vielen Dank für Eure Antworten - ich bin begeistert, dass man hier noch so aktiv ist


Result := trunc((aval * power(10, astellen)) + 0.5) / power(10, astellen)
Sowas in der Art hatte ich bereits bei mir am Laufen - das hat durch die Umwandlung in Integer (durch das Trunc)
und wieder Rückwandeln in Extended auch einige Werte, bei denen es zu falschen Ergebnissen kam;
deswegen bin ich ja umgeschwenkt auf Frac() und Int() - die aber noch schlechtere Ergebnisse gebracht haben

Momentan habe ich eine Variante programmiert, die ist sozusagen von hinten durch's Knie...
...da ich in den Ergebnissen meiner Berechnungen maximal 4 Nachkommastellen (meistens nur zwei oder drei) brauche,
teile ich die Zahlen jetzt (in einer eigenen Klasse) in einen Vorkomma-, einen Nachkommateil auf - jeweils als 32-Bit unsigned integer plus einem Flag als Vorzeichen.
Die Extraktion der Vor- und Nachkommateile erfolgt dadurch, dass ich das per Format (mit definierten FormatSettings) in einen String schreibe und dort die Einzelteile parse (deswegen die Aussage "von hinten durch's Knie")
Funktioniert ganz gut - ist aber eigentlich ein übler Hack...

Ich werde mir auf jeden Fall die von Euch vorgeschlagenen Code-Bibliotheken mal anschauen.


Etwas Offtopic: in dem Projekt war der ursprüngliche Code noch in Delphi5 verfasst (mit noch älteren Teilen, die noch aus Turbo Pascal für DOS-Zeiten stammen) - das habe ich inzwischen auf Delphi7 "hochgeschoben".
Ich würde das ja auch gerne auf noch neuere Delphi-Versionen bringen - aber ich denke, das wird schwierig:
- es ist natürlich noch 32-Bit Code
- es wird noch Crystal Reports v9 mit deren VCL-Wrapper verwendet (bzw. einer stark gepatchten Version)
- es sind Datenbankzugriffe enthalten, die über die BDE an eine MS-SQL Server Instanz gehen (diese ist inzwischen aktuell)
- teilweise greift Crystal Reports in den Reports auf direkt auf diese MS-SQL Server-Instanz für die Daten zu aber
- teilweise erfolgt der Austausch vom Programm an Crystal Reports auch über aufbereitete Daten, die ebenfalls über BDE an lokale Paradox-Tabellen erfolgen
Und ich denke, da ist die größte Schwierigkeit - Crystal braucht weiterhin Paradox und ich habe noch nichts gefunden, mit dem ich in Delphi (einfach) die Paradox-Zugriffe, die über die BDE gehen, ersetzen könnte, so dass die Reportdateien nicht (oder nicht wesentlich) geändert werden müssen...


Ich habe schonmal Versuche mit RAD Studio 11 Alexandria gemacht - da hat aber zum Einen nichts (mit dem Projekt) funktioniert und zum Anderen hatte ich schon beim Testen einige Abstürze der IDE (mal ganz abgesehen von der schwierigen Handhabung wg. Lizenzserver) - was mir kein gutes Gefühl vermittelt hat...
  Mit Zitat antworten Zitat