13 Stimmen

int-Variable mit führender Null?

Warum ergibt das Folgen 34? Das scheint nichts mit oktalen Zahlen zu tun zu haben.

intval(042);

18voto

jcomeau_ictx Punkte 36287

Aber eine führende 0 steht in vielen Sprachen für oktal, so auch in diesem Fall.

3voto

AndreKR Punkte 30092

Es hat etwas mit oktalen Zahlen zu tun, 042 wird als Oktalzahl interpretiert 42 das ist 4 * 8 + 2 = 34 .

Bitte beachten Sie, dass die Oktal-Interpretation erfolgt, wenn das Zahlenliteral beim Laden des PHP-Skripts geparst wird. Es hat nichts zu tun mit intval() was hier nichts bringt, da der Wert bereits eine ganze Zahl ist.

Die Oktalinterpretation erfolgt nur bei Zahlenliteralen, nicht bei der Umwandlung einer Zeichenkette in eine Ganzzahl:

intval(042)   // == 34
intval('042') // == 42
(int)'042'    // == 42

1voto

rancho Punkte 145

In PHP wird eine Zahl mit führender 0 als oktale Zahl gelesen.

042 wird also als Oktalzahl gelesen.

Die Funktion intval() wandelt sie in eine Dezimalzahl um, die 34 ist.

Die Browserausgabe ist also 34.

0voto

Chris Thompson Punkte 34220

Es geht einfach darum, wie die Funktion definiert ist. Die führende Null ist eine Anweisung, die als Oktalzahl geparst wird, ähnlich wie 0x als Präfix Hex bedeutet. Siehe die Dokumentation für weitere Informationen .

0voto

Stuti Punkte 1610

Seien Sie vorsichtig, wenn Sie dieser Funktion einen String-Wert mit einer führenden "0" übergeben. Wenn Sie ihr den Wert "042" geben, behandelt sie ihn als BASE 8 - 9 und wandelt ihn in einen Dezimalwert um, der standardmäßig die Basis ist.

Bitte gehen Sie durch こん

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X