In den Screenshots konnte man sehen, dass Multi den Wert 10 und Zahl den Wert 0.075 hatte, wobei interessant gewesen wäre, wie der Wert 0.075 entstanden war.
Das ist nicht ganz richtig: In dem ScreenShot aus #1 hat Multi den Wert 100. Andernfalls wäre ja auch nicht 7,5 das erwartete Ergebnis.
Ansonsten hast du natürlich recht mit der internen Darstellung.
Das folgende Beispielprogramm demonstriert das (zumindest unter
Win32):
Delphi-Quellcode:
program Project262;
{$APPTYPE CONSOLE}
var
MultiS: Single;
WertS: Single;
MultiD: Double;
WertD: Double;
begin
MultiS := 100;
MultiD := 100;
WertS := 0.075;
WertD := 0.075;
Writeln('Single: ', Round(MultiS * WertS));
Writeln('Double: ', Round(MultiD * WertD));
Readln;
end.
Es lässt sich aber auch zeigen, daß die Verwendung der von mir vorgeschlagenen
Unit das Problem löst:
Delphi-Quellcode:
program Project263;
{$APPTYPE CONSOLE}
uses
DecimalRounding_JH1;
var
MultiS: Single;
WertS: Single;
MultiD: Double;
WertD: Double;
begin
MultiS := 100;
MultiD := 100;
WertS := 0.075;
WertD := 0.075;
Writeln('Single: ', Round(MultiS * WertS));
Writeln('Double: ', Round(MultiD * WertD));
Writeln('Single JH: ', DecimalRoundSgl(MultiS * WertS, 0));
Writeln('Double JH: ', DecimalRoundDbl(MultiD * WertD, 0));
Readln;
end.