Wie kann man prüfen, ob eine Zahl Float oder Integer ist?

2 Antworten

Ich kenn zwar Haskell nicht gerade besonders gut (und selbst das ist eigentlich noch übertrieben), aber im Grunde dürfte dieses Verfahren geeignet sein:

  1. Subtrahiere die INT-Entsprechung deines Wertes von deinem Wert.
  2. Überprüfe, ob der Betrag der Differenz kleiner als Epsilon ist (Epsilon ist dabei ein möglichst kleiner Wert, z.B. 0.000000001).
  3. Falls ja, liegt mit an Sicherheit grenzender Wahrscheinlichkeit ein Wert ohne Nachkommastellen vor, der als INT betrachtet und behandelt werden kann.
  4. Andernfalls haben wir einen FLOAT.

Wobei, falls Haskell feste Typen für Variablen verwendet (ähnlich wie z.B. in C int x = 123;), sollte sich diese Frage eigentlich gar nicht erst stellen.

Runde die Zahl doch einfach und vergleiche sie dann mit dem Originalwert.

numberIsInteger number = number == fromInteger(round number)

Demo: https://ideone.com/7HHmDM