Einzelnen Beitrag anzeigen

Bodenseematze

Registriert seit: 10. Jul 2023
50 Beiträge
 
#1

System.Frac / System.Int / Math.SimpleRoundTo - komische Ergebnisse

  Alt 10. Jul 2023, 10:30
Hallo zusammen,

ich verzweifle gerade an den Methoden System.Frac und System.Int und auch an Math.SimpleRoundTo

Die liefern bei mir für manche Zahlen in meinen Augen komplett irrsinnige Werte zurück.
Woran liegt das?

Code:
var
  val : Extended;
  frac : Extended;
  frac2 : Extended;
Code:
  val := 22.649;
  val := val * 100;             // 2264.9 drin
  val := System.Int( val );     // 2264.0
  frac := System.Frac( val );   // 0.9
  frac2 := frac * 10.0;         // 9.0
  frac2 := System.Int( frac2 ); // Ergebnis ist 8.0 - wieso das?????
  // auch komisch:
  frac2 := frac * 10.0           // 9.0
  frac2 := System.Frac( frac2 ); // Ergebnis ist 1.0 - wieso das?????
Ich kann mir diese Ergebnisse überhaupt nicht erklären; dass es mal durch Bit-Darstellung / Umwandlungen zu kleinen Abweichungen kommt, verstehe ich ja noch - aber so krass?

Achja, das ganze ist mit Delphi7 (ist ein Alt-Programm, muss ich leider immer noch verwenden), das dann unter Win10-x64 ausgeführt wird...


EDIT: noch ein Ergänzung: eigentlich brauche ich das ganze, um eine eigene Methode für das Runden von Nachkommastellen zu schreiben, weil die Bibliotheksfunktionen alle für mich nicht brauchbare Sachen (z.B. "Banker's rounding") machen:
Code:
  val := 22.65;
  val := Math.SimpleRoundTo( 22.65, -1 ); // erwartet hätte ich 22.7 als Ergebnis, ich bekomme aber 22.6 - warum???
Eigentlich ganz trivial: ich möchte beim runden auf eine bestimmte Nachkommastelle, dass wenn die nächste Stelle < 4 ist abrunden und wenn sie 5 oder größer ist, aufrunden.
Und zwar unabhängig davon ob die zu rundende Stelle eine gerade oder ungerade Zahl ist oder ob die gesamte Zahl positiv oder negativ ist oder ob heute schönes oder schlechtes Wetter ist...

Geändert von Bodenseematze (10. Jul 2023 um 10:44 Uhr)
  Mit Zitat antworten Zitat