Formatowanie stringu
DarkGL
12.08.2011
Szukam dokładnego opisu używania znaków formatujących ( np. %f %d %i ) np. jaka jest różnica między %i %d chociaż w sumie robią one to samo to jednak jakieś różnice są miedzy nimi
może być w języku angielskim
chcę się w to bardziej wgłębić
może być w języku angielskim
chcę się w to bardziej wgłębić
R3X
12.08.2011
każde środowisko ma swój własny zestaw formatów, w .Net nawet nie ma typów tylko wszystkie dodatkowe parametry są zrzucane toString();
Zkont?! 12.08.2011
Szukam dokładnego opisu używania znaków formatujących ( np. %f %d %i )
PS. Przeleciałem całe google i Yahoo, lecz nie znalazłem terminu 'znaki formatujące'. Najwidoczniej on nie istnieje
Użytkownik Zkont?! edytował ten post 12.08.2011 22:37
DarkGL
12.08.2011
chyba knopers mówił kiedyś o różnicy między %d i %i i tak mi to utkwiło w pamięci na wiki jest że to synonim więc chyba będe musiał się tym zadowolić
vaverix
12.08.2011
Witam forumowiczów.
Sądzę, że to nie jest synonim.
%i - integer - Typ liczbowy stałoprzecinkowy (w tym całkowitoliczbowy), ze znakiem, (na ogół 32 bitowy - 4bajty - z zakresem -2147483648 .. 2147483647).
by R3X - dziękuję, za upewnienie, sprostowanie.
%d - decimal - Liczba dziesiętna.
Były 3 teorie:
Pierwsza:
%d - Według co poniektórych osób, jest to double integer - Typ liczbowy całkowity, stałoprzecinkowy o podwójnym zakresie względem zwykłego int'a (64 bity - 8 bajtów).
- Jest pierwsze "ale" - Pawn jest językiem skryptowym 32-bitowym...
Druga:
Spotkałem się z odmienną opinią na ten temat, ponieważ Pawn jest pochodną od C, a tam typ double jest liczbą zmiennoprzecinkową o podwójnej w stosunku do float dokładności.
- I tu też jest "ale" - nie tworzymy zmiennej typu double, w sposób: "new Double:Zmienna" ani też nie wyświetlamy Float'ów za pomocą formatowania %d.
Można zatem sprawdzić, czy rzeczywiście tak jest, próbując wyświetlić liczbę rzeczywistą za pomocą tego formatowania:
Gdzie po wpisaniu /test w czacie wyświetli się:
A więc liczbę całkowitą (typ integer) wyświetla poprawnie, a liczbę rzeczywistą (zmiennoprzecinkową - float) już nie.
Trzecia:
- teoria, jest taka, że to jest synonim, ale w takim razie po co on by był?
Niczego nie narzucam. To jest temat warty przedyskutowania.
Użytkownik vaverix edytował ten post 12.08.2011 19:08
Sądzę, że to nie jest synonim.
%i - integer - Typ liczbowy stałoprzecinkowy (w tym całkowitoliczbowy), ze znakiem, (na ogół 32 bitowy - 4bajty - z zakresem -2147483648 .. 2147483647).
by R3X - dziękuję, za upewnienie, sprostowanie.
%d - decimal - Liczba dziesiętna.
Były 3 teorie:
Pierwsza:
- Jest pierwsze "ale" - Pawn jest językiem skryptowym 32-bitowym...
Druga:
- I tu też jest "ale" - nie tworzymy zmiennej typu double, w sposób: "new Double:Zmienna" ani też nie wyświetlamy Float'ów za pomocą formatowania %d.
Można zatem sprawdzić, czy rzeczywiście tak jest, próbując wyświetlić liczbę rzeczywistą za pomocą tego formatowania:
#include <amxmodx> public plugin_init() { register_plugin("test", "0.001", "vaverix"); register_clcmd("say /test", "test"); } public test(id) { client_print(id, 3, "int: %d", 2); // liczba całkowita client_print(id, 3, "float: %d", 2.24428); // liczba rzeczywista }
Gdzie po wpisaniu /test w czacie wyświetli się:
int: 2 float: 10747664
A więc liczbę całkowitą (typ integer) wyświetla poprawnie, a liczbę rzeczywistą (zmiennoprzecinkową - float) już nie.
Trzecia:
Niczego nie narzucam. To jest temat warty przedyskutowania.
Użytkownik vaverix edytował ten post 12.08.2011 19:08
R3X
12.08.2011
%d to decimal, a nie double
%d nie wyświetla poprawnie floatów, bo Float: jest przetwarzany zgodnie ze standardem IEE 754-1985, interpretacja całkowita nie ma sensu
%d nie wyświetla poprawnie floatów, bo Float: jest przetwarzany zgodnie ze standardem IEE 754-1985, interpretacja całkowita nie ma sensu
Zkont?! 12.08.2011
Spór właściwie o nic. Niżej daję Wam wyjaśnienie.
1. Odsyłam do linku nt. słowa 'Decimal' w angielskiej wikipedii. >> Decimal From Wikipedia, the free encyclopedia. Jak możecie z tego wywnioskować, decimalem nazywamy dziesiętny typ zapisu danych.
2. Następną stroną jest coś poświęcone wyrazowi 'Integer'. Podaję wersję również z angielskiej wikipedii. >> Integer From Wikipedia, the free encyclopedia. Jak widać po wyczytaniu samego wstępu, integer jest to angielskie nazewnictwo liczby całkowitej.
3. Teraz możemy śmiało powiedzieć, że jedno i drugie to właściwie to samo. Myślę, że spór zakończony.
Użytkownik Zkont?! edytował ten post 12.08.2011 22:38
1. Odsyłam do linku nt. słowa 'Decimal' w angielskiej wikipedii. >> Decimal From Wikipedia, the free encyclopedia. Jak możecie z tego wywnioskować, decimalem nazywamy dziesiętny typ zapisu danych.
2. Następną stroną jest coś poświęcone wyrazowi 'Integer'. Podaję wersję również z angielskiej wikipedii. >> Integer From Wikipedia, the free encyclopedia. Jak widać po wyczytaniu samego wstępu, integer jest to angielskie nazewnictwo liczby całkowitej.
3. Teraz możemy śmiało powiedzieć, że jedno i drugie to właściwie to samo. Myślę, że spór zakończony.
Użytkownik Zkont?! edytował ten post 12.08.2011 22:38
vaverix
12.08.2011
3. Teraz możemy śmiało powiedzieć, że jedno i drugie to właściwie to samo. Myślę, że spór zakończony.
Sporu nie ma, bo wszystko wyżej jest wyjaśnione.
%i - liczba całkowita
%d - liczba dziesiętna
Użytkownik vaverix edytował ten post 12.08.2011 21:08
A może sma?
12.08.2011
Ale jaka wtedy jest różnica skoro żadne nie jest wstanie wyświetlić liczby większej niż 2147483647?
R3X
12.08.2011
Niżej daję Wam wyjaśnienie.
Jak już nam wyjaśniasz to przynajmniej wyciągaj rozsądne wnioski. Takich bzdur, że integer i decimal to to samo dawno nie słyszałem.3. Teraz możemy śmiało powiedzieć, że jedno i drugie to właściwie to samo.
Liczba `całkowita` dotyczy ogólnego podziału liczb, a `dziesiętna` określa system liczbowy.
Liczba dziesiętna to też 0x10, 010, 0b120, ale format %i ma narzucony system dziesiętny. Z liczbami całkowitymi związane są też inne formaty: %x, %X, %o, %b no i właśnie %d. Każdy z nich jest związany z jakimś systemem liczbowym. Właśnie dlatego formatowanie liczby całkowitej w systemie dziesiętnym ma 2 znaczki:
- %i jako ogólnie liczba całkowita, domyślnie w systemie dzisiętnym
- %d bez domysłów jako liczba całkowita w systemie dziesiętnym.
a i wcześniej nie zauważyłem
sam podałeś link, który temu zaprzeczatakie znaczniki występują tylko w C i C++
Przy okazji opisywania funkcji format sprawdziłem, które % z C działają w Pawnie tylko ktoś mi popsuł tabelkę
Zkont?! 12.08.2011
Racja R3X, napisałem dzisiaj stek bzdur Tak na marginesie, to wracając do postu 'A może SMA?', to tak duże liczby zapisujesz za pomocą stringa.
Użytkownik Zkont?! edytował ten post 12.08.2011 22:44
Użytkownik Zkont?! edytował ten post 12.08.2011 22:44
R3X
12.08.2011
Widzę, że wprowadziłem małe zamieszanie. Spróbuję doprecyzować.
Mamy liczbę x=16
i teraz możemy ją wydrukować jako liczbę całkowitą
albo sprecyzować liczbie całkowitej system liczbowy
Proszę bardzo, wynik z użyciem %i i %d jest taki sam. %d jest aliasem dla %i (lub odwrotnie). To jak przypisujemy wartość do zmiennej x nie znaczenia, wszystko i tak jest konwertowane na system binarny w pamięci komputera.
Mamy liczbę x=16
i teraz możemy ją wydrukować jako liczbę całkowitą
log_amx("x=%i", x);%i samo wybierze system dziesiętny i efekt będzie taki:
x=16
albo sprecyzować liczbie całkowitej system liczbowy
log_amx("x=0x%X", x); //szesnastkowy
x=0x10
log_amx("x=0%o", x);//ósemkowy
x=020
log_amx("x=%d", x);//dziesiętny
x=16
Proszę bardzo, wynik z użyciem %i i %d jest taki sam. %d jest aliasem dla %i (lub odwrotnie). To jak przypisujemy wartość do zmiennej x nie znaczenia, wszystko i tak jest konwertowane na system binarny w pamięci komputera.