2009-06-04 4 views
1

Newbie Actionscript 3 Frage geben: Warum tutint (bla) andere Antwort aus (bla) als int

(Math.sqrt((r * r - (r - i) * (r - i)) as Number) * 2) as int 

geben Sie mir ein anderes Ergebnis aus

int(Math.sqrt((r * r - (r - i) * (r - i)) as Number) * 2) 
+0

Nun ... was 2 Ergebnisse bekommen Sie? –

+0

9.59 ... ohne irgendeine Umwandlung nach int, 9 mit der zweiten und 0 für die erste. – Archagon

+0

Ich habe noch mehr getestet, und anscheinend (9 als int), (9.5 als Zahl) und (int (9.5)) geben die korrekten Ergebnisse, aber (9.5 als int) ergibt null. Warum sollte das der Fall sein? – Archagon

Antwort

8

Der as Operator ist eine direkte Besetzung , während int() implizit das Stockwerk der Nummer findet (beachten Sie, dass es tatsächlich nicht Math.floor jedoch ruft). Die Adobe docs for as sagt, es überprüft, dass der "erste Operand ein Mitglied des Datentyps ist, der durch den zweiten Operanden angegeben wird." Da 9,59 nicht als int darstellbar ist, schlägt die as Umwandlung fehl und gibt 0 zurück, int() findet zuerst die Etage der Zahl und dann wird sie nach int umgewandelt.

Sie könnten Math.floor(blah) as int tun, und es sollte funktionieren, obwohl es langsamer wäre. Angenommen, Sie möchten eine abgerundete Int, Math.round(blah) as int wäre korrekter, aber int(blah + .5) wäre am schnellsten und Runde richtig.

2

Die als Betreiber ist nicht viel als Guss, mehr so ​​etwas wie:

i int? int: null;

Das ist verwirrend wie die Hölle. Es prüft, ob die Variable von diesem Typ ist, wenn dies der Fall ist, wird die Variable zurückgegeben, sonst würden Sie null erhalten (0 für einen Int).

Verwandte Themen