che cosa sono questi simbolico stringhe media: %02d %01e?

Sto guardando una riga di codice simile a:

sprintf(buffer,"%02d:%02d:%02d",hour,minute,second);

Penso che il simbolico stringhe di fare riferimento al numero di caratteri numerici visualizzato per ora, minuto, ecc – o qualcosa di simile, non sono del tutto certo.

Normalmente riesco a capire questo genere di cose, ma non sono riuscito a trovare alcun riferimento utile alla ricerca “%02d %01e” su google. Chiunque in grado di far luce su questo per me?

  • sprintf è C, non Java?
  • E ‘ presente anche in C++, e molti altri C-come le lingue.
  • L’aggiunta di AlexanderMP commento (per aiutare i motori di ricerca) che è anche usato lo stesso modo in R la sprintf {base} function è un wrapper per la funzione C.
InformationsquelleAutor dRef90 | 2010-07-31

 

6 Replies
  1. 43

    Invece di usare Google per %02d si dovrebbe avere cercato per sprintf() funzione.

    %02d significa “formato integer con 2 cifre, a sinistra, imbottitura con zero”, così:

    Formato Di Dati Di Risultato 
    %1 02d 01 
    %02d 11 11 
    
    • 2 o più cifre potrebbero essere più chiaro
  2. 27

    Sono formattazione String. Java sintassi specifica è data in java.util.Formatter.

    La sintassi generale è la seguente:

       %[argument_index$][flags][width][.precision]conversion

    %02d esegue intero decimale conversione d, formattato con zero imbottitura (0 bandiera), con larghezza 2. Così, un int argomento il cui valore è dire 7, sarà formattato in "07" come String.

    Si può vedere anche questa stringa di formattazione, ad esempio,Stringa.formato.


    Formati comunemente utilizzati

    Questi sono solo alcuni formati comunemente utilizzati e non copre la sintassi in modo esaustivo.

    Zero imbottitura per i numeri

    System.out.printf("Agent %03d to the rescue!", 7);
    //Agent 007 to the rescue!

    Larghezza di giustificazione

    È possibile utilizzare il - bandiera per la giustificazione a sinistra; altrimenti sarà giustificazione a destra.

    for (Map.Entry<Object,Object> prop : System.getProperties().entrySet()) {
        System.out.printf("%-30s : %50s%n", prop.getKey(), prop.getValue());
    }

    Questa stampa qualcosa come:

    java.version                   :                                 1.6.0_07
    java.vm.name                   :               Java HotSpot(TM) Client VM
    java.vm.vendor                 :                    Sun Microsystems Inc.
    java.vm.specification.name     :       Java Virtual Machine Specification
    java.runtime.name              :          Java(TM) SE Runtime Environment
    java.vendor.url                :                     http://java.sun.com/

    Per di più potente messaggio di formattazione, è possibile utilizzare java.di testo.MessageFormat. %n è il capo di conversione (vedi sotto).

    Conversione esadecimale

    System.out.println(Integer.toHexString(255));
    //ff
    
    System.out.printf("%d is %<08X", 255);
    //255 is 000000FF

    Di notare che questo usa anche il < relativa indicizzazione (vedi sotto).

    In virgola mobile formattazione

    System.out.printf("%+,010.2f%n", 1234.567);
    System.out.printf("%+,010.2f%n", -66.6666);
    //+01,234.57
    //-000066.67

    Per il più potente in virgola mobile formattazione, utilizzare DecimalFormat invece.

    %n per specifici della piattaforma separatore di riga

    System.out.printf("%s,%n%s%n", "Hello", "World");
    //Hello,
    //World

    %% per un effettivo %-segno

    System.out.printf("It's %s%% guaranteed!", 99.99);
    //It's 99.99% guaranteed!

    Di notare che la double letterale 99.99 è autoboxed per Double, in cui una conversione di stringa utilizzando toString() è definito.

    n$ per argomento esplicito di indicizzazione

    System.out.printf("%1$s! %1$s %2$s! %1$s %2$s %3$s!",
        "Du", "hast", "mich"
    );
    //Du! Du hast! Du hast mich!

    < per la relativa indicizzazione

    System.out.format("%s?! %<S?!?!?", "Who's your daddy");
    //Who's your daddy?! WHO'S YOUR DADDY?!?!?

    Domande correlate

    • ottima info, grazie!
  3. 0

    La risposta da Alexander si riferisce alla completa docs…

    Tuo esempio semplice la questione, semplicemente, stampa questi valori a 2 cifre – aggiunta 0 se necessario.

  4. 0

    % è un carattere speciale che si mettono in stringhe di formato, ad esempio in linguaggio C printf e scanf (e la famiglia), che in sostanza dice “questo è un segnaposto per qualcos’altro, non per essere stampato/leggere letteralmente.”

    Per esempio, un (%02d) in una stringa di formato di printf è un segnaposto per una variabile di tipo integer che sarà stampato in formato decimale (%02d) imbottito e almeno a due cifre con zeri se necessario.

    L’effettivo numero intero è fornita in un argomento della funzione, ad esempio printf("%02d",5);
    stampa 05 sullo schermo, (%01d) inoltre funziona allo stesso modo

    Stesso premuto per Java e altri linguaggi di troppo 🙂

Lascia un commento