Einzelnen Beitrag anzeigen

Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
744 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Nur x Nachkommastellen von Float

  Alt 8. Okt 2023, 22:33
Hallo,

als Korrektur zu #3, (mit DOUBLE gab's Probleme)

Delphi-Quellcode:
function GetDigits(const AValue: Extended; Digits: Integer): Integer;

var
    value:Extended;
    value1:Real;

begin
   value:=frac(AValue)*intpower(10,digits);
   value1:=value;
   Result := trunc(value1);
end;

Gruß
Hoi mmw,

das Problem bleibt. Wenn ein Dezimalbruch eine unendlich binäre Darstellung hat (also binär irgend ein periodischer Bruch ist), dann kannst du den dezimalen Wert binär mit den Formaten single, double, extended nicht genau abspeichern. Das System kann nur die nächstkleinere oder nächstgrössere (durch das Format (extended) vorgegebene) mögliche Zahl abspeichern. (siehe weiter oben)
In deinem Fall treten zum Beispiel zwischen 99.000001 und 99.999999 natürlich wiederum die "gleichen" 496 Probleme auf. U.a. wird für GetDigitsNeu( 99.101000, 3 ).ToString) 100 ausgegeben.
Dies geschieht auch, wenn du die von dir vorgeschlagene Konversion nach real (als double implementiert) weglässt und mit extended rechnest. Extended erlaubt dir lediglich eine grössere Stellengenauigkeit als double.
Michael Gasser

Geändert von Michael II ( 9. Okt 2023 um 19:49 Uhr)
  Mit Zitat antworten Zitat