Forum: Programmieren allgemein
Delphi
by Andreas13,
12. Jul 2023
Es könnte natürlich auch sein, daß bei Dir die Rundungsart des Prozessors verstellt/falsch eingestellt ist. Bitte folgenden Code mal testen:
VAR
MyRoundingMode : TRoundingMode;
MyRoundingModeStr: String;
...
MyRoundingMode:= GetRoundMode;
Case MyRoundingMode Of
Forum: Programmieren allgemein
Delphi
by Andreas13,
12. Jul 2023
Versuche mal das obige Beispiel ganz ohne Math.pas mit diesem Code:
function SimpleRoundTo(const AValue: Extended; const ADigit: TRoundToRange = -2): Extended;
var
LFactor: Extended;
begin
LFactor := AMath.IntPower(10.0, ADigit);
if AValue < 0 then
Result := AMath.Int((AValue / LFactor) - 0.5) * LFactor
else
Forum: Programmieren allgemein
Delphi
by Andreas13,
12. Jul 2023
Das kann ich leider nicht nachvollziehen: Wenn ich aus System.Math.pas SimpleRoundTo(..) direkt in mein Projekt kopiere
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
Forum: Programmieren allgemein
Delphi
by Andreas13,
12. Jul 2023
Fehlende und von Dir benötige Routinen kannst Du aus System.Math.pas rauskopieren... :-D
"Mein" Delphi liefert den korrekten Wert: AMath.Frac(9.0) = 0.00000000000000E+0000
Frac(..) ist in System.pas deklariert:
function Frac(const X: Extended): Extended;
begin
Result := X - Int(X);
end;