Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Dodawanie z zachowaniem początkowych zer
Forum PHP.pl > Forum > Przedszkole
Otto
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.
Fifi209
Jeżeli dobrze pamiętam: sprintf
Otto
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... ;/
Valdi_B
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).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.