AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Rundungsproblem in Delphi

Ein Thema von norwegen60 · begonnen am 27. Jan 2025 · letzter Beitrag vom 29. Jan 2025
 
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
522 Beiträge
 
Delphi 12 Athens
 
#9

AW: Rundungsproblem in Delphi

  Alt 28. Jan 2025, 16:44
Delphi-Quellcode:
function SimpleRoundTo(const AValue: Extended; const ADigit: TRoundToRange = -2): Extended;
var
  LFactor: Extended;
begin
  LFactor := IntPower(10.0, ADigit);
  if AValue < 0 then
    Result := Int((AValue / LFactor) - 0.5) * LFactor
  else
    Result := Int((AValue / LFactor) + 0.5) * LFactor;
end;
Das war, was ich ursprünglich verwendet habe, was aber beim Aufruf die 182.1325 in 182.132 gerundet hat.
Ich hatte die Funktion als Overload mit Extended und Double. Habe mittlerweile raus gefunden, dass Aufruf mit Extended korrekt auf 182.133 rundet, Aufruf mit Double aber auf 182.132. Das Programm in dem ich arbeite, arbeitet aber nahezu durchgängig mit Double und das umzustellen wäre ein ziemlicher Akt. Und wer weiß was da dann dafür passiert.

Und natürlich ist die Umstellung von TRUNC auf ROUND auch nicht zielführend. Kann ja nicht zuerst 0.5 dazuaddieren und dann noch runden.

Ich lasse es bei meinem "Bastelansatz" und der sieht bei Double jetzt so aus
Delphi-Quellcode:
function RoundToDecimals(rValue: Double; iDecimals: Integer): Double;
var
  rFactor: Double;

begin
  rValue := rValue + 0.0000000000001;
  rFactor := IntPower(10.0, -iDecimals);
  if rValue < 0 then
    Result := Int((rValue / rFactor) - 0.5) * rFactor
  else
    Result := Int((rValue / rFactor) + 0.5) * rFactor;
  exit;
end;
Verwende das Ganze nur zum Runden von Dezimalen, und iDecimals wird immer nur positiv übergeben
Die 0.0000000000001 war der unterste Wert, der meine Wert so korrigiert hat, dass danach 184.133 raus kam. Egal wo ich die Funktion verwende, mehr als 10 Dezimalen werden nie angezeigt (Normal sind max 6). Die Erhöhung ist also nicht relevant

Ach ja: Die D7 Formel kommt auch auf 184.132

Geändert von norwegen60 (28. Jan 2025 um 16:46 Uhr)
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:16 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