Wie andere Plakate angedeutet haben, könnte eine bessere Frage zu definieren, was bedeutet „nicht ein Dezimalteil mit“. (Ich wiederhole auch ihre Warnungen bei langen Doppeln.) Welche Definition richtig ist, hängt davon ab, was Sie erreichen wollen. Ich finde, dass "innerhalb 1e-6" oft eine gute Definition ist, aber es hängt von der Situation ab.
Für Ihre spezielle Frage, mögen Sie wahrscheinlich diese:
-(BOOL) numberHasDecimal: (double) n
{
double integerPart = 0.;
if (fabs(modf(n, &integerPart)) > 0.) // has decimal, like 16.300000 or 6453.353259
return YES;
else
return NO; // has no decimal, like 58.000000 or 9274.000000
}
Was ist hier los ist, dass die modf Funktion will den Bruchteil und speichert den ganzzahligen Teil der Zahl in einer anderen Doppel zurückzukehren, um die Adresse in die du hineingehst. Trotz seines Namens ist es nicht das Äquivalent von "x% y"; es ist wirklich mehr das Äquivalent von "Return x% 1.0, auch Speicherung (x - Stock (x)) in den bereitgestellten Zeiger" (zumindest für positive Zahlen, das ist.)
Sie können sich die zweite, Zeiger denken Parameter als eine Möglichkeit, mehr als einen Wert von einem einzelnen Funktionsaufruf zurückzugeben. Auch wenn es Ihnen egal ist, in diesem Fall über den ganzzahligen Teil, wird die Übergabe einer Adresse für modf zum Schreiben des ganzzahligen Teils den Compiler beruhigen und Ihnen das Ergebnis bringen, nach dem Sie suchen.
Wenn ich 369.000000 durch diese Methode setzen, sagt es, dass es eine Dezimalzahl hat, warum ist das so? – michaellindahl
Möglicherweise einer dieser oben erwähnten "langen Doppel"/Obj-C-Konflikte. Was ist der Rückgabewert von 'fmodl (369.0, 1.0)'? –
es gibt 0 zurück ... Ich glaube, ich muss lange Doppel verwenden, weil ich sicherstellen muss, dass mein Code bis zu 999999999 machen kann * 999999999 – michaellindahl