Ich weiß nicht, wie man das hier googelt, also frage ich es hier. Warum passiert es, dass wenn ich eine Variable $something = 0759
deklariere, dass sie in 61 verwandelt wird. Ich weiß, dass die Antwort sehr einfach sein muss, also bitte vergib mir meine Dummheit.
Es ist ein Integer-Literal, Sie deklarieren eine Oktalzahl mit einer führenden Null.
%Vor%Das oktale Zahlensystem ist ein Basis-8-Zahlensystem. Sie können nur Nummern zwischen 0-7 verwenden (andere Nummern werden verworfen).
%Vor%Sie könnten die Nullen mit ltrim überspringen.
%Vor% In PHP (und den meisten Programmiersprachen) werden Zahlen, die mit einem 0
vorangestellt sind, als eine Oktalzahl behandelt. Es ist ein Basis-8-Nummernsystem und hat Ziffern von 1-7.
Oktal 0759 ist äquivalent zu Oktal 075 (9 wird verworfen, weil es im oktalen System keine 9 gibt). Oktal 075 ist äquivalent zu dezimal 61. PHP speichert die Zahl tatsächlich als oktal, aber wenn sie mit print
/ echo
ausgegeben wird, ist sie immer dezimal, also wird 075 zu 61.
Siehe Wikipedia auf Konvertierung von Oktal zu Dezimal . Aber das sollte dir eine Grundidee geben:
(075) 8 = (0 x 8 ^ 2) + (7 x 8 ^ 1) + (5 x 8 ^ 0)
(075) 8 = 0 + 56 + 5
(075) 8 = 61
Grundsätzlich:
%Vor%Speichern Sie die Zahlen einfach als Ganzzahlen / Strings und formatieren Sie sie bei der Ausgabe.
Verwenden Sie sprintf()
:
Verwenden von str_pad()
:
Wenn Sie wirklich die führende Null beibehalten möchten, speichern Sie sie als String:
%Vor%Zahlen, die mit 0 beginnen, können vom PHP-Compiler als Oktalzahl-Notation behandelt werden.
Weitere Details finden Sie hier: Verwenden Sie Zahlen, die mit 0 beginnen, in einer Variablen in PHP
Zahl beginnend mit 0 ist oktal, aber in oktal können Sie 0-7 nicht 9 verwenden, also wird 0759 auf 075 und 075 in Oktal ist 61 in Dezimal