Printf format specifikatörer binära alternativ


Returnerar en sträng formaterad av de vanliga printf-konventionerna i C-bibliotekets funktion sprintf. Se nedan för mer information och se sprintf (3) eller printf (3) på ditt system för en förklaring av de allmänna principerna. Perl har sin egen sprintf formatering: den emulerar C-funktionen sprintf (3). men använder det inte förutom flytande punktnummer, och även då är bara standardmodifierare tillåtna. Icke-standardiserade tillägg i din lokala sprintf (3) är därför inte tillgängliga från Perl. Till skillnad från printf. sprintf gör inte vad du förmodligen menar när du skickar den en array som ditt första argument. Arrayet ges skalärt kontext, och istället för att använda det 0: e elementet i arrayen som formatet, kommer Perl att använda räkningen av element i array som formatet, vilket nästan aldrig är användbart. Perls sprintf tillåter följande universellt kända omvandlingar: Perl tillåter dessutom följande omvandlingar som stöds i stort sett: Till sist, för bakåt (och vi menar bakåt) kompatibilitet tillåter Perl dessa onödiga men omfattande omvandlingar: Observera att antalet exponent siffror i den vetenskapliga notationen som produceras av e. E. g och G för tal med modulen hos exponenten mindre än 100 är systemberoende: den kan vara tre eller mindre (nollpolstret vid behov). Med andra ord kan 1,23 gånger tio till 99: e vara antingen 1.23e99 eller 1.23e099. På samma sätt för a och A. exponent eller hexadecimala siffror kan flyta: speciellt det långa dubbla Perl-konfigurationsalternativet kan orsaka överraskningar. Mellan formatet och formatet kan du ange flera ytterligare attribut som styr tolkningen av formatet. I ordning är dessa: Ett explicit formatparameterindex, som 2. Sprinten kommer som standard att formatera nästa oanvända argument i listan, men det här låter dig ta bort argumenten i ordning: När ett mellanslag och ett plustecken ges som flaggor på en gång ignoreras rymden. När flaggan och en precision ges i o-omvandlingen, ökas precisionen om den är nödvändig för den ledande 0. Denna flagga berättar Perl att tolka den medföljande strängen som en vektor av heltal, en för varje tecken i strängen. Perl tillämpar formatet på varje heltal i sin tur, och förenar sedan de resulterande strängarna med en separator (en punkt, som standard). Detta kan vara användbart för att visa ordinära värden för tecken i godtyckliga strängar: Sätt en asterisk före v för att åsidosätta strängen som ska användas för att separera numren: Du kan också explicit ange det argumentnummer som ska användas för anslutningssträngen med något liknande 2v för Exempel: Argument är vanligtvis formaterade för att vara så breda som krävs för att visa det angivna värdet. Du kan åsidosätta bredden genom att ange ett tal här eller få bredden från nästa argument (med) eller från ett angivet argument (t. ex. med 2): Om en fältbredd som erhållits genom är negativ, har den samma effekt som - flagga: vänsterjustering. Du kan ange en precision (för numeriska omvandlingar) eller en maximal bredd (för strängkonverteringar) genom att ange a. följt av ett nummer. För flytande punktformat förutom g och G. Detta anger hur många ställen som helst för decimalpunkten att visa (standardvärdet är 6). Till exempel: För g och G anger detta det maximala antalet siffror som ska visas, inklusive de före decimalen, och de efter det till exempel: För heltalskonverteringar innebär att precisering innebär att utmatningen av numret själv ska vara noll - plattad till denna bredd, där 0-flaggan ignoreras: För strängkonverteringar avkortas strängen för att specificera en precision för att passa den angivna bredden: Du kan också få precisionen från nästa argument med .. eller från ett angivet argument (t. ex. .2): Om en precision som erhållits genom är negativ, räknas den som ingen precision alls. För numeriska omvandlingar kan du ange storleken för att tolka numret som att använda l. h. V. q. L. eller ll. För heltalskonvertering (duox X bi DUO) antas siffror vanligtvis vara oberoende av att standard heltalstorlek finns på din plattform (vanligtvis 32 eller 64 bitar), men du kan åsidosätta detta för att använda istället en av de vanliga C-typerna, som stöds av kompilatorn brukade bygga Perl: Från och med 5.14 uppstår ingen av dessa undantag om de inte stöds på din plattform. Om varningar är aktiverade emitteras emellertid en varning för printf-varningsklassen på en icke-stöds konverteringsflagg. Om du istället föredrar ett undantag, gör så här: Om du vill veta om ett versionsberoende innan du börjar köra programmet, sätt något liknande här på toppen: Du kan ta reda på om din Perl stöder quads via Config: För flytande - punktkonverteringar (efg EFG), antas vanligtvis att standardflödesstorleken på din plattform (dubbel eller lång dubbel), men du kan tvinga länge dubbelt med q. L. eller ll om din plattform stöder dem. Du kan ta reda på om din Perl stöder långa dubblar via Config: Du kan ta reda på om Perl anser att det är dubbelt dubbelt att vara den standard flytande punktstorleken som ska användas på din plattform via Config: Det kan också vara så länge dubblar och dubblar är desamma sak: Storleksspecifik V har ingen effekt för Perl-kod, men stöds för kompatibilitet med XS-kod. Det betyder att använda standardstorleken för ett Perl-heltal eller flytande punkt, vilket är standardvärdet. Normalt tar sprintf nästa oanvända argument som det värde som ska formateras för varje formatspecifikation. Om formatspecifikationen använder för att kräva ytterligare argument, konsumeras de från argumentlistan i den ordning de visas i formatspecifikationen innan värdet som ska formateras. Om ett argument specificeras av ett explicit index påverkar det inte den normala ordningen för argumenten, även om det explicit angivna indexet skulle ha varit nästa argument. använder a för bredden, b för precisionen och c som värdet att formatera under: skulle använda a för bredd och precision, och b som det värde som ska formateras. Här är några fler exempel vara medvetna om att när du använder ett explicit index kan det behöva flyr: Om användningsland (inklusive användarland 39: notcharacters39) är i kraft och POSIX :: setlocal har blivit kallad, används tecknet som används för decimalavskiljaren i formaterade flytpunkten påverkas av LCNUMERIC-lokalen. Se perllocale och POSIX. Printf-kommandot Stranger, det här är ett mycket stort ämne som behöver erfarenhet - fyll i information som saknas, utvidga beskrivningarna och korrigera detaljer om du kan OBS! Det handlar om Bash-builtin-kommandofönstret , beskrivningen ska vara nästan identisk för ett externt kommando som följer POSIX. GNU Awk förväntar sig ett kommatecken efter formatsträngen och mellan varje av argumenten för ett printf-kommando. För exempel, se: kodbit. Till skillnad från andra dokumentationer vill jag inte omdirigera dig till den manuella sidan för funktionen printf () C. Men om du är mer erfaren, bör det vara den mest detaljerade beskrivningen av formatsträngarna och modifierarna. På grund av motstridiga historiska implementeringar av ekokommandot rekommenderar POSIX att printf föredras framför eko. Printf-kommandot ger en metod för att skriva ut förformaterad text som liknar printf () systemgränssnittet (C-funktionen). It039s betydde som efterträdare för eko och har många fler funktioner och möjligheter. Förutom andra orsaker har POSIX ett mycket bra argument för att rekommendera det: Båda historiska huvudvarianterna av echo-kommandot är ömsesidiga exklusiva, de kolliderar. Ett quotnewquot-kommando måste uppfinnas för att lösa problemet. Textformatet ges i ltFORMATgt. medan alla argument som formatsträngen kan peka på ges efter det här, indikerat av ltARGUMENTSgt. Således ser en typisk printf-call ut: där quotSurname: snName: snquot är formatspecifikationen, och de två variablerna överförs som argument, s i formatstring pekar på (för varje format specifierare du ger, printf väntar på ett argument) . Om den ges, tilldelas utgången till variabel VAR i stället för tryckt till stdout (jämförbar med sprintf () på något sätt) - v Alternativ can039t tilldela direkt array-index i Bash-versioner som är äldre än Bash 4.1. I versioner som är nyare än 4.1 måste man vara försiktig när man utför expansioner i det första non-option-argumentet för printf, eftersom detta öppnar möjligheten för en enkel kodinsprutningssårbarhet. där ekot kan naturligtvis ersättas med alla godtyckliga kommandon. Om du måste, ange antingen en hårdkodad formatsträng eller använd - för att signalera slutet på alternativen. Exakt samma fråga gäller också för läsning. och en liknande till kartfilen. även om de utför utvidgningar i sina argument är mindre vanliga. Naturligtvis är det i skal-meningen att argumenten bara är strängar, men de gemensamma C-notationerna plus några tillägg för talkonstanterna är igenkända för att ge ett antal argument till printf. Formatering Numeric Print Output Tidigare såg du användningen av utskriften och println metoder för utskrift strängar till standardutgången (System. out). Eftersom alla siffror kan konverteras till strängar (som du kommer se senare i den här lektionen) kan du använda dessa metoder för att skriva ut en godtycklig blandning av strängar och siffror. Java-programmeringsspråket har andra metoder, som tillåter dig att utöva mycket mer kontroll över din utskriftsutmatning när siffror ingår. Printf och formatmetoder Paketet java. io innehåller en PrintStream-klass som har två formateringsmetoder som du kan använda för att ersätta utskrift och println. Dessa metoder, format och printf. motsvarar varandra. Det kända System. out som du har använt händer för att vara ett PrintStream-objekt, så att du kan åberopa PrintStream-metoder på System. out. Således kan du använda format eller printf någonstans i din kod där du tidigare har använt utskrift eller println. Syntaxen för dessa två java. io. PrintStream-metoder är till exempel densamma: där formatet är en sträng som anger formateringen som ska användas och args är en lista över variablerna som ska skrivas ut med den formateringen. Ett enkelt exempel skulle vara den första parametern, format. är en formatsträng som anger hur objekten i den andra parametern, args. ska formateras. Formatsträngen innehåller vanlig text samt formatspecifika. vilka är specialtecken som formaterar objektets argument. args. (Notationsobjektet args heter varargs. Vilket betyder att antalet argument kan variera.) Formatspecifika-torer börjar med ett procenttecken () och slutar med en omvandlare. Konverteraren är ett tecken som anger vilken typ av argument som ska formateras. Mellan det procenta tecknet () och omvandlaren kan du få frivilliga flaggor och specifikationer. Det finns många omvandlare, flaggor och specifiers, som dokumenteras i java. util. Formatter Här är ett grundläggande exempel: d anger att den enda variabeln är ett decimaltalstal. N är en plattformsoberoende newline-karaktär. Utmatningen är: Printf och formatmetoderna är överbelastade. Var och en har en version med följande syntax: Om du vill skriva ut siffror i det franska systemet (där ett komma används i decimaltal i den engelska representationen av flytpunkten), skulle du till exempel använda: Ett exempel Följande tabell listar några av de omvandlare och flaggor som används i provprogrammet TestFormat. java. som följer bordet. Konverterare och flaggor som används i TestFormat. java Tio tecken i bredd, rätt motiverad, med tre platser efter decimalpunkt. Följande program visar några av formateringen som du kan göra med format. Produktionen visas inom dubbla citat i den inbäddade kommentaren: Obs! Diskussionen i det här avsnittet täcker bara grunderna i formatet och printf-metoderna. Ytterligare detaljer finns i Basic IO-delen av Essential-spåret, på sidan Formatering. Att använda String. format för att skapa strängar är täckt av strängar. DecimalFormat-klassen Du kan använda klassen java. text. DecimalFormat för att styra visning av ledande och bakre nollor, prefix och suffixer, gruppering (tusentals) separatorer och decimalseparatorn. DecimalFormat erbjuder stor flexibilitet vid formatering av siffror, men det kan göra din kod mer komplex. Exemplet som följer skapar ett DecimalFormat-objekt, myFormatter. genom att överföra en mönstersträng till DecimalFormat-konstruktorn. Metoden format (), vilken DecimalFormat ärverv från NumberFormat. anropas sedan av myFormatter 151it accepterar ett dubbelvärde som ett argument och returnerar det formaterade numret i en sträng: Här är ett provprogram som illustrerar användningen av DecimalFormat: Tabellen nedan förklarar varje rad av utgången.

Comments