Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Dodawanie z zachowaniem początkowych zer
Otto
post
Post #1





Grupa: Zarejestrowani
Postów: 144
Pomógł: 7
Dołączył: 22.03.2010

Ostrzeżenie: (0%)
-----


Witam mam taki problem z dodawaniem liczb z zachowaniem początkowych zer np.

  1. $a = 002;
  2. $a++;
  3. echo $a;


Zwróci mi 3 a chciałbym otrzymać 003, niestety w google nic nie znalazłem na ten temat.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Jeżeli dobrze pamiętam: sprintf
Go to the top of the page
+Quote Post
Otto
post
Post #3





Grupa: Zarejestrowani
Postów: 144
Pomógł: 7
Dołączył: 22.03.2010

Ostrzeżenie: (0%)
-----


Myślę że to dobra funkcja lecz niestety nie za bardzo ją rozumiem z tego co zrozumiałem każdy format podchodzi pod inna liczbę ale coś mi nie działa

  1. <?php
  2. $a = 076;
  3. $a++;
  4. if (strlen($a) == 1 || strlen($a) == 3) {
  5. $a = sprintf("%03s", $a)."<br>";
  6. } elseif (strlen($a) == 2) {
  7. $a = sprintf("%03o", $a)."<br>";
  8. }
  9.  
  10. echo $a;
  11. ?>


Wydawało się być dobrze ale gdy $a wynosi 77 to coś wynik wychodzi 100... ;/
Go to the top of the page
+Quote Post
Valdi_B
post
Post #4





Grupa: Zarejestrowani
Postów: 107
Pomógł: 30
Dołączył: 19.02.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Musisz tu rozróżnić 3 rzeczy:
1. Reprezentację liczby w kodzie programu (np. instrukcji podstawienia).
2. Reprezentację liczby w zmiennej.
3. Sposób jej prezentacji np. przy wydruku lub "wmontowaniu" w jakiś inny tekst.

W konkretnym przypadku:
1. Użyłeś zapisu 076, co oznacza zapis oktalny, dziesiętnie 62.
2. Liczba jest pamiętana jako integer (62), po inkrementacji - 63.
3. W kodzie programowym masz 2 sposoby konwersji: %03s (string) i %03o (oktalnie).

Gdy zamiast 076 dasz 077 (dziesiętnie 63), to po inkrementacji otrzymasz 100 (dziesiętnie 64).

A może to wszystko powinny być wartości dziesiętne?
Wtedy format konwersji powinien być %03d.

Zrób tak:
1. Liczbę podstawiaj do zmiennej bez prowadzącego zera (zer). Zakładam, że chodzi Ci o zapis dziesiętny.
2. Działaj na niej jak na zwykłej liczbie.
3. Funkcję sprintf("%03d", ...) stosuj tylko przy wyświetlaniu tej zmiennej (lub "wmontowaniu" jej w jakiś większy tekst).

Ten post edytował Valdi_B 20.02.2011, 13:31:08
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.09.2025 - 23:41