Wenn Sie überprüfen möchten, ob sqrt
eine Ganzzahl ist, können Sie Folgendes tun:
Das Problem liegt in Ihrer Definition von "Integer". Sie lesen es als "einen Wert, der keine signifikanten Bruchzahlen ungleich null hat", während in is_int
nur auf einen Datentyp verwiesen wird, d. H. Buchstäblich alles mit dem Typ int
.
Das heißt, der Fließkommawert 10.0
ist immer noch ein Fließkommawert, obwohl sein mathematischer Wert gleich dem der Ganzzahl 10
ist.
Das Ergebnis von sqrt
ist nie eine ganze Zahl; Sie können jedoch überprüfen, ob ein Gleitkommawert irgendwelche von null verschiedenen gebrochenen signifikanten Zahlenwerte hat, indem Sie ihn mit einer Zahl vergleichen, in der Sie diese alle bewusst ausgeschaltet haben.
Eine naive Implementierung:
%Vor% Natürlich sollten Sie niemals etwas mit einem Fließkommawert vergleichen mit ==
; Verwenden Sie Ihren bevorzugten Fließkomma-Gleichheitsmechanismus, um diesen Test durchzuführen.
Tatsächlich nehme ich an, dass die einzigen Werte, für die dieser Vergleich möglicherweise fehlschlagen könnte, Bruchzahlen sind. In diesem Fall sollte der Test trotzdem fehlschlagen. Also ==
könnte ausreichen.
is_int () bezieht sich auf den Datentyp des Ergebnisses, nicht auf den in diesem Ergebnis enthaltenen Wert. sqrt () immer gibt unabhängig vom Wert
ein Ergebnis des Datentyps float zurück