Einzelnen Beitrag anzeigen

Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.355 Beiträge
 
Delphi 11 Alexandria
 
#1

SetRoundMode wirkt nicht immer

  Alt 15. Mär 2024, 11:40
Delphi-Version: 11 Alexandria
Kleines Gimmick zum Wochenende.
Da ich gerade ein größeres Refactoring mache, wollte ich alte (etwas merkwürdige) Berechnungen mit Rundungen überarbeiten.
Dabei hatte ich Source, der etwa so aussah:
Delphi-Quellcode:
  Result := Result * Faktor;
  SetRoundMode(rmUp);
  Result := SimpleRoundTo(Result); // Oder war es RoundTo(Result, -2) ?
  SetRoundMode(rmNearest);
Ergebnis: Die Rundung hat nicht funktioniert, wie es vorgesehen war.
Dann wie folgt geändert:
Delphi-Quellcode:
  SetRoundMode(rmUp);
  Result := Result * Faktor;
  Result := SimpleRoundTo(Result);
  SetRoundMode(rmNearest);
Ergebnis: Jetzt funktioniert es.
Es scheint so, als müssten die verwendeten Variablen im gesamten Kontext den RoundMode haben. Ich habe das nicht weiter geprüft und im Endeffekt verwerfen müssen. Der Code ist also auch aus dem Kopf geschrieben.
Ich bin auf die Lösung gekommen, als ich mit dem Debugger nach der Rundung nochmal in die Berechnnungszeile gegangen bin und die Schritte wiederholt habe. Ich dachte erst, dass die Rundungsfunktion doppelt durchlaufen werden müsste (manchmal macht Delphi schon merkürdige Dinge). Aber es war halt die andere Lösung des Problems.

Leider bin ich am WE nicht online. Vielleicht ist das nur bei mir so. Aber vielleicht hat jemand Lust, das selbst mal zu testen. Dann wüsste ich zumindest, ob es an Delphi oder mir liegt.
Peter
  Mit Zitat antworten Zitat