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...