Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie
Inny

Formatowanie stringu

Inny

  • Zamknięty Temat jest zamknięty
14 odpowiedzi w tym temacie

#1 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 553
Godlike

  • Postów:11 976
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 12.08.2011 13:34

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ć ;)
  • +
  • -
  • 0

#2 Zkont?!

    Życzliwy

  • Zbanowany

Reputacja: 19
Początkujący

  • Postów:22
  • Imię:Damian
  • Lokalizacja:Warszawa
Offline

Napisano 12.08.2011 13:54

Łap linka - printf, WIKIPEDIA

#3 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 12.08.2011 15:24

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();
  • +
  • -
  • 0

#4 Zkont?!

    Życzliwy

  • Zbanowany

Reputacja: 19
Początkujący

  • Postów:22
  • Imię:Damian
  • Lokalizacja:Warszawa
Offline

Napisano 12.08.2011 15:35

Szukam dokładnego opisu używania znaków formatujących ( np. %f %d %i )


R3X, takie znaczniki występują tylko w C i C++ (mowa o %d, %i, etc.), stąd wnioskuję, że DarkGL pytał o jeden z tych języków.

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


#5 DarkGL

    Nie oddam ciasteczka !

  • Autor tematu
  • Administrator

Reputacja: 6 553
Godlike

  • Postów:11 976
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 12.08.2011 17:01

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ć
  • +
  • -
  • 0

#6 vaverix

    Życzliwy

  • Użytkownik

Reputacja: 29
Życzliwy

  • Postów:29
  • GG:
  • Lokalizacja:Warszawa
Offline

Napisano 12.08.2011 18:25

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:

#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:

- 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

  • +
  • -
  • 0

#7 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 12.08.2011 18:47

%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
  • +
  • -
  • 2

#8 Zkont?!

    Życzliwy

  • Zbanowany

Reputacja: 19
Początkujący

  • Postów:22
  • Imię:Damian
  • Lokalizacja:Warszawa
Offline

Napisano 12.08.2011 19:15

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


#9 vaverix

    Życzliwy

  • Użytkownik

Reputacja: 29
Życzliwy

  • Postów:29
  • GG:
  • Lokalizacja:Warszawa
Offline

Napisano 12.08.2011 21:07

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

  • +
  • -
  • 0

#10 A może sma?

    Godlike

  • Power User

Reputacja: 546
Wszechwiedzący

  • Postów:1 464
  • Steam:steam
  • Imię:Tomasz
  • Lokalizacja:Polska
Offline

Napisano 12.08.2011 22:27

Ale jaka wtedy jest różnica skoro żadne nie jest wstanie wyświetlić liczby większej niż 2147483647?
  • +
  • -
  • 0

#11 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 12.08.2011 22:33

Niżej daję Wam wyjaśnienie.

3. Teraz możemy śmiało powiedzieć, że jedno i drugie to właściwie to samo.

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.

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.
Oba formaty drukują liczbę dokładnie w ten sam sposób.



a i wcześniej nie zauważyłem

takie znaczniki występują tylko w C i C++

sam podałeś link, który temu zaprzecza


Przy okazji opisywania funkcji format sprawdziłem, które % z C działają w Pawnie tylko ktoś mi popsuł tabelkę :mur:
  • +
  • -
  • 1

#12 Zkont?!

    Życzliwy

  • Zbanowany

Reputacja: 19
Początkujący

  • Postów:22
  • Imię:Damian
  • Lokalizacja:Warszawa
Offline

Napisano 12.08.2011 22:43

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


#13 DarkGL

    Nie oddam ciasteczka !

  • Autor tematu
  • Administrator

Reputacja: 6 553
Godlike

  • Postów:11 976
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 12.08.2011 22:51

czyli %d cdo np. 10 20 30 tak a %i do np. 0x13 10 0b10 ?
  • +
  • -
  • 0

#14 A może sma?

    Godlike

  • Power User

Reputacja: 546
Wszechwiedzący

  • Postów:1 464
  • Steam:steam
  • Imię:Tomasz
  • Lokalizacja:Polska
Offline

Napisano 12.08.2011 22:51

Ale wtedy to już nie jest liczba tylko ciąg znaków :P
  • +
  • -
  • 0

#15 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 12.08.2011 23:05

*
Popularny

Widzę, że wprowadziłem małe zamieszanie. Spróbuję doprecyzować.


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.
  • +
  • -
  • 5





Również z jednym lub większą ilością słów kluczowych: Inny

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych