Warum gibt $ variable = 0759 61 aus? [Duplikat]

7

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.

    
Bazinga777 26.02.2014, 12:04
quelle

5 Antworten

14

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%     
pce 26.02.2014, 12:06
quelle
9

Warum passiert das?

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.

Die Konvertierung

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%

Wie man dieses Problem löst

Speichern Sie die Zahlen einfach als Ganzzahlen / Strings und formatieren Sie sie bei der Ausgabe.

Verwenden Sie sprintf() :

%Vor%

Verwenden von str_pad() :

%Vor%

Wenn Sie wirklich die führende Null beibehalten möchten, speichern Sie sie als String:

%Vor%     
Amal Murali 26.02.2014 12:07
quelle
2

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

    
fycth 26.02.2014 12:07
quelle
1

Wenn Sie einer Variablen eine Variable zuweisen, die mit 0 beginnt, wird sie als oktal angenommen, in Ihrem Fall (0759) 9 ist keine Oktalziffer, daher wird sie ignoriert, 75 in Dezimal umgewandeltes Oktal ist 61.

    
Smitt 26.02.2014 12:10
quelle
1

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

    
amir beygi 26.02.2014 12:11
quelle

Tags und Links