AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi System.Frac / System.Int / Math.SimpleRoundTo - komische Ergebnisse
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Bodenseematze · begonnen am 10. Jul 2023 · letzter Beitrag vom 13. Jul 2023
 
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
 

 

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 14:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz