Specyfikatory formatu printf opcje binarne


Zwraca ciąg sformatowany przez zwykłe konwencje printf funkcji bibliotecznej c sprintf. Zobacz poniżej, aby uzyskać więcej informacji i zobacz sprintf (3) lub printf (3) w twoim systemie, aby poznać ogólne zasady. Perl ma własne formatowanie sprintf: emuluje funkcję C sprintf (3). ale nie używa go poza liczbami zmiennoprzecinkowymi, a nawet wtedy dozwolone są tylko standardowe modyfikatory. Niestandardowe rozszerzenia w lokalnym sprintf (3) są zatem niedostępne w Perlu. W przeciwieństwie do printf. sprintf nie robi tego, co prawdopodobnie masz na myśli, kiedy przekazujesz mu tablicę jako pierwszą argumentację. Tablica otrzymuje kontekst skalarny, a zamiast używać 0. elementu tablicy jako formatu, Perl użyje liczby elementów w tablicy jako formatu, który prawie nigdy nie jest użyteczny. Perls sprintf umożliwia następujące powszechnie znane konwersje: Ponadto Perl pozwala na następujące szeroko obsługiwane konwersje: Wreszcie, dla wstecznej (i mamy na myśli wsteczną) kompatybilności, Perl pozwala na te niepotrzebne, ale szeroko obsługiwane konwersje: Należy pamiętać, że liczba cyfry potęgowe w notacji naukowej wytworzonej przez e. E. g i G dla liczb z modułem wykładnika mniejszym niż 100 zależą od systemu: może wynosić trzy lub mniej (w razie potrzeby z wyściełaniem zerowym). Innymi słowy, 1,23 razy dziesięć do 99. może wynosić 1,23 e99 lub 1,23 e099. Podobnie jak w przypadku a i a, wykładnik lub cyfry heksadecymalne mogą unosić się w powietrzu: szczególnie opcja podwójnej opcji Perla może powodować niespodzianki. Między literą a literą formatu można określić kilka dodatkowych atrybutów kontrolujących interpretację formatu. W kolejności są to: jawny indeks parametrów formatu, taki jak 2. Domyślnie sprintf sformatuje następny nieużywany argument na liście, ale to pozwala ci sprowadzić argumenty poza kolejność: gdy spacja i znak plus są podane jako flagi naraz, spacja jest ignorowana. Gdy flaga i precyzja są podane w konwersji o, precyzja jest zwiększana, jeśli jest konieczna dla wiodącego 0. Ta flaga mówi Perlowi, aby interpretował podany ciąg jako wektor liczb całkowitych, po jednym dla każdego znaku w ciągu. Perl stosuje format do każdej liczby całkowitej po kolei, a następnie łączy wynikowe ciągi za pomocą separatora (domyślnie kropka). Może to być przydatne do wyświetlania wartości porządkowych znaków w arbitralnych ciągach: Umieść gwiazdkę przed v, aby zastąpić ciąg znaków, aby użyć go do oddzielenia liczb: Możesz również jawnie określić numer argumentu, który będzie używany dla ciągu łączenia, używając czegoś takiego jak 2v dla przykład: Argumenty są zwykle sformatowane tak, aby były tylko tak szerokie, jak wymagane do wyświetlenia danej wartości. Możesz nadpisać szerokość, wstawiając tutaj liczbę, lub uzyskaj szerokość od następnego argumentu (z) lub z określonego argumentu (np. Z 2): Jeśli szerokość pola uzyskana poprzez wartość ujemną, ma taki sam skutek jak: flaga: lewe-uzasadnienie. Możesz określić precyzję (dla konwersji numerycznych) lub maksymalną szerokość (dla konwersji łańcuchów), określając a. a następnie numer. W przypadku formatów zmiennoprzecinkowych oprócz g i G. określa on liczbę miejsc z prawej strony przecinka dziesiętnego do wyświetlenia (wartość domyślna to 6). Na przykład: w przypadku g i G określa maksymalną liczbę cyfr do wyświetlenia, w tym liczbę przed kropką dziesiętną i liczbę po niej, na przykład: w przypadku konwersji całkowitych określenie precyzji oznacza, że ​​wynik samej liczby powinien wynosić zero - dotknięto do tej szerokości, w której zignorowano flagę 0: W przypadku konwersji łańcuchów, precyzja obcinania napisu jest dopasowywana do określonej szerokości: Można również uzyskać dokładność z następnego argumentu za pomocą .. lub z określonego argumentu (np. .2): Jeśli precyzja uzyskana poprzez wartość ujemną, liczy się jako nieposiadająca żadnej precyzji. W przypadku konwersji numerycznych można określić rozmiar interpretujący liczbę jako liczbę l. h. V. q. L. lub II. W przypadku konwersji całkowitych (duox X bi DUO) przyjmuje się, że liczby są takie same, jak domyślny rozmiar całkowity na platformie (zazwyczaj 32 lub 64 bity), ale można to zmienić, aby zamiast tego używać jednego ze standardowych typów C, obsługiwanych przez kompilator użyty do zbudowania Perla: od wersji 5.14, żaden z nich nie wywołuje wyjątku, jeśli nie są one obsługiwane na twojej platformie. Jeśli jednak włączone są ostrzeżenia, ostrzeżenie o klasie ostrzeżenia printf jest wydawane na nieobsługiwanej flagie konwersji. Jeśli zamiast tego wolisz wyjątek, wykonaj następujące czynności: Jeśli chcesz wiedzieć o zależności wersji przed uruchomieniem programu, umieść coś takiego na górze: Możesz sprawdzić, czy twój Perl obsługuje quady za pomocą Config: For floating - konwersje punktowe (efg EFG), przyjmuje się zwykle, że liczby są domyślnym rozmiarem zmiennoprzecinkowym na twojej platformie (podwójne lub długie podwójne), ale możesz wymusić długie podwójne z q. L. lub ll, jeśli platforma je obsługuje. Możesz sprawdzić, czy twój Perl obsługuje długie debelowanie poprzez Config: Możesz dowiedzieć się, czy Perl uważa, że ​​długi double to domyślny rozmiar zmiennoprzecinkowy, który możesz wykorzystać na swojej platformie poprzez Config: Może to być również to, że długie double i duble są takie same thing: Specyfikator rozmiaru V nie ma wpływu na kod Perla, ale jest obsługiwany dla kompatybilności z kodem XS. Oznacza to użycie standardowego rozmiaru dla liczby całkowitej Perl lub liczby zmiennoprzecinkowej, która jest domyślna. Zwykle sprintf przyjmuje następny nieużywany argument jako wartość do sformatowania dla każdej specyfikacji formatu. Jeśli specyfikacja formatu wymaga dodatkowych argumentów, są one pobierane z listy argumentów w kolejności, w jakiej pojawiają się w specyfikacji formatu przed wartością do sformatowania. Jeśli argument jest określony przez jawny indeks, nie ma to wpływu na normalną kolejność argumentów, nawet jeśli jawnie określony indeks byłby następnym argumentem. używa a dla szerokości, b dla precyzji i c jako wartości do sformatowania while: użyje a dla szerokości i precyzji, a b jako wartość do sformatowania. Oto kilka przykładów, mając na uwadze, że przy korzystaniu z indeksu jawnego, może być potrzebne uchwycenie: Jeśli używasz ustawień narodowych (w tym używania ustawień narodowych 39: notcharacters39) i wywoływanych jest POSIX :: setlocale, znak użyty do separatora dziesiętnego w na sformatowane liczby zmiennoprzecinkowe wpływa ustawienie regionalne LCNUMERIC. Zobacz perllocale i POSIX. Polecenie printf Stranger, to bardzo duży temat, który wymaga doświadczenia - proszę uzupełnić brakujące informacje, rozszerzyć opisy i poprawić szczegóły, jeśli możesz Uwaga: Chodzi o polecenie printb Bash-builtin - jednak , opis powinien być niemal identyczny dla zewnętrznego polecenia następującego po POSIX. GNU Awk oczekuje przecinka po ciągu znaków formatu i pomiędzy każdym z argumentów polecenia printf. Przykłady można znaleźć: fragment kodu. W przeciwieństwie do innych dokumentacji, nie chcę przekierowywać cię na stronę podręcznika dla rodziny funkcji C printf (). Jeśli jednak bardziej doświadczony, powinien być najbardziej szczegółowym opisem ciągów i modyfikatorów formatowania. Ze względu na sprzeczne historyczne implementacje polecenia echo, POSIX zaleca, aby printf był preferowany przez echo. Polecenie printf udostępnia metodę drukowania sformatowanego tekstu podobnego do interfejsu systemu printf () (funkcja C). It039s oznacza następcę echa i ma znacznie więcej funkcji i możliwości. Oprócz innych powodów, POSIX ma bardzo dobry argument, aby go polecić: oba historyczne główne smaki komendy echo są wzajemnie wykluczające się, zderzają się. Polecenie quotnewquot musiało zostać wymyślone, aby rozwiązać problem. Format tekstowy podany jest w ltFORMATgt. podczas gdy wszystkie argumenty, które mogą wskazywać na formatstring, są tutaj podane, wskazane przez ltARGUMENTSgt. W ten sposób typowy printf - call wygląda następująco: gdzie nazwaSzczegółem: snName: snquot jest specyfikacją formatu, a dwie zmienne są przekazywane jako argumenty, s w formaciestring wskazuje na (dla każdego nadawcę formatu, printf oczekuje na jeden argument) . Jeśli jest podane, dane wyjściowe są przypisywane do zmiennej VAR zamiast drukowanej na stdout (w podobny sposób do sprintf () w jakiś sposób) Opcja - v może can039t przypisać bezpośrednio do indeksów tablicy w wersjach Basha starszych niż Bash 4.1. W wersjach nowszych niż 4.1 trzeba być ostrożnym przy ekspansji do pierwszego nieopcjonalnego argumentu printf, ponieważ otwiera to możliwość podatności na łatwe wstrzyknięcie kodu. gdzie echo może oczywiście zostać zastąpione dowolnym poleceniem. Jeśli musisz, albo określić ciąg formatowany lub użyj - aby zasygnalizować koniec opcji. Dokładny ten sam problem dotyczy również odczytu. i podobny do pliku mapy. choć przeprowadzanie ekspansji w ich argumenty jest mniej powszechne. Oczywiście w powłoce - to znaczy, że argumenty są tylko ciągami, jednak powszechnie używane notacje C oraz pewne dodatki dla stałych liczbowych są rozpoznawane, aby dać numer-argument do printf. Tworzenie wyjściowego wydruku liczbowego Wcześniej widziałeś użycie druku i Metody println do drukowania ciągów na standardowe wyjście (System. out). Ponieważ wszystkie liczby można konwertować na ciągi (jak zobaczymy później w tej lekcji), możesz użyć tych metod, aby wydrukować dowolną kombinację ciągów i liczb. Język programowania Java ma jednak inne metody, dzięki którym można znacznie lepiej kontrolować wydruki, gdy uwzględniane są liczby. Metody printf i format Pakiet java. io zawiera klasę PrintStream, która ma dwie metody formatowania, których można użyć do zamiany print i println. Te metody, format i printf. są sobie równe. Znany system. out, którego używasz, jest obiektem PrintStream, więc możesz wywołać metody PrintStream w System. out. W ten sposób możesz użyć formatu lub printf w dowolnym miejscu kodu, w którym wcześniej korzystałeś z print lub println. Na przykład Składnia dla tych dwóch metod java. io. PrintStream jest taka sama: gdzie format jest ciągiem, który określa formatowanie, a args jest listą zmiennych, które mają być drukowane przy użyciu tego formatowania. Prostym przykładem będzie Pierwszy parametr, format. to ciąg formatujący określający sposób, w jaki obiekty w drugim parametrze, args. mają być sformatowane. Łańcuch formatu zawiera zwykły tekst oraz specyfikatory formatu. które są znakami specjalnymi, które formatują argumenty obiektu. args. (Obiekt notacji, args, nazywany jest varargs. Oznacza to, że liczba argumentów może być różna.) Specyfikatory formatów zaczynają się znakiem procenta () i kończą się konwerterem. Konwerter to znak określający typ argumentu do sformatowania. Pomiędzy znakiem procentowym () a konwerterem mogą znajdować się opcjonalne flagi i specyfikatory. Istnieje wiele konwerterów, flag i specyfikatorów, które są udokumentowane w java. util. Formatter Oto podstawowy przykład: d określa, że ​​pojedyncza zmienna jest dziesiętną liczbą całkowitą. N jest niezależnym od platformy znakiem nowej linii. Dane wyjściowe są następujące: Metody printf i format są przeciążone. Każda z nich ma wersję o następującej składni: Aby wydrukować liczby w systemie francuskim (gdzie zamiast przecinka w języku angielskim jest używana liczba zmiennoprzecinkowa), należy użyć: Przykład Poniższa tabela zawiera listę niektórych konwerterów i flag używanych w przykładowym programie TestFormat. java. wynika z tabeli. Konwertery i flagi używane w TestFormat. java Dziesięć znaków w szerokości, prawe usprawnienie, z trzema miejscami po przecinku. Poniższy program pokazuje niektóre formatowanie, które można wykonać w formacie. Dane wyjściowe są wyświetlane w podwójnych cudzysłowach w osadzonym komentarzu: Uwaga: omówienie w tej sekcji obejmuje tylko podstawy metod formatowania i printf. Dalsze szczegóły można znaleźć w sekcji Podstawowa sekcja IO szlaku Essential, na stronie Formatowanie. Używanie String. format do tworzenia łańcuchów jest opisane w Ciągach. Klasa DecimalFormat Za pomocą klasy java. text. DecimalFormat można sterować wyświetlaniem początkowych i końcowych zer, przedrostków i przyrostków, separatorów grupujących (tysiące) i separatora dziesiętnego. DecimalFormat oferuje dużą elastyczność w formatowaniu liczb, ale może sprawić, że kod będzie bardziej złożony. Poniższy przykład tworzy obiekt DecimalFormat, myFormatter. poprzez przekazanie ciągu wzorców do konstruktora DecimalFormat. Metoda format (), którą DecimalFormat dziedziczy po NumberFormat. jest następnie wywoływana przez myFormatter 151it akceptuje podwójną wartość jako argument i zwraca sformatowaną liczbę w ciągu znaków: Oto przykładowy program ilustrujący użycie DecimalFormat: Poniższa tabela wyjaśnia każdą linię danych wyjściowych.

Comments