Formatando a saída de impressão numérica Anteriormente, você viu o uso dos métodos de impressão e impressão para imprimir strings na saída padrão (System. out). Uma vez que todos os números podem ser convertidos em strings (como você verá mais adiante nesta lição), você pode usar esses métodos para imprimir uma mistura arbitrária de cordas e números. A linguagem de programação Java tem outros métodos, no entanto, que permitem exercer muito mais controle sobre a saída de impressão quando os números estão incluídos. Métodos printf e format O pacote java. io inclui uma classe PrintStream que possui dois métodos de formatação que você pode usar para substituir print and println. Estes métodos, formato e printf. São equivalentes um ao outro. O sistema System. out que você está usando acontece ser um objeto PrintStream, para que você possa invocar métodos PrintStream no System. out. Assim, você pode usar formato ou imprimir em qualquer lugar em seu código, onde você já usou print ou println. Por exemplo, a sintaxe para esses dois métodos java. io. PrintStream é a mesma: onde o formato é uma string que especifica a formatação a ser usada e args é uma lista das variáveis a serem impressas usando essa formatação. Um exemplo simples seria o primeiro parâmetro, formato. É uma string de formato que especifica como os objetos no segundo parâmetro, args. Devem ser formatados. A seqüência de formato contém texto simples, bem como especificadores de formato. Que são caracteres especiais que formam os argumentos do Object. Args. (A notação Objeto. Args é chamado varargs. O que significa que o número de argumentos pode variar.) Os especificadores de formato começam com um sinal de porcentagem () e terminam com um conversor. O conversor é um caractere que indica o tipo de argumento a ser formatado. Entre o sinal de porcentagem () eo conversor, você pode ter indicadores e especificadores opcionais. Existem muitos conversores, bandeiras e especificadores, que estão documentados em java. util. Formatter Aqui está um exemplo básico: O d especifica que a variável única é um inteiro decimal. O n é um personagem independente da plataforma independente. A saída é: os métodos printf e format estão sobrecarregados. Cada um tem uma versão com a seguinte sintaxe: Para imprimir números no sistema francês (onde uma vírgula é usada no lugar decimal na representação em inglês de números de ponto flutuante), por exemplo, você usaria: Um exemplo A tabela a seguir Lista alguns dos conversores e sinalizadores que são usados no programa de exemplo, TestFormat. java. Que segue a mesa. Conversores e Bandeiras Usados em TestFormat. java Dez caracteres de largura, justificados à direita, com três lugares após o ponto decimal. O programa a seguir mostra algumas das formatações que você pode fazer com o formato. A saída é mostrada com aspas duplas no comentário incorporado: Nota: A discussão nesta seção cobre apenas os conceitos básicos do formato e dos métodos de impressão. Mais detalhes podem ser encontrados na seção Basic I O da trilha Essential, na página de Formatação. Usar String. format para criar strings é abordado em Strings. A classe DecimalFormat Você pode usar a classe java. text. DecimalFormat para controlar a exibição de zeros, prefixos e sufixos, separadores de grupo (milhares) e o separador decimal. O DecimalFormat oferece uma grande flexibilidade na formatação de números, mas pode tornar seu código mais complexo. O exemplo a seguir cria um objeto DecimalFormat, myFormatter. Passando uma seqüência de caracteres padrão para o construtor DecimalFormat. O método format (), que DecimalFormat herda do NumberFormat. É então invocado pelo myFormatter 151. Ele aceita um valor duplo como um argumento e retorna o número formatado em uma string: Aqui está um exemplo de programa que ilustra o uso de DecimalFormat: A tabela a seguir explica cada linha de saída. Retorna uma string formatada pelo habitual Convenções de impressão da função de biblioteca C sprintf. Veja abaixo para obter mais detalhes e veja sprintf (3) ou printf (3) em seu sistema para obter uma explicação dos princípios gerais. Perl faz sua própria formatação de sprintf: ele emula a função C sprintf (3). Mas não o usa, exceto para números de ponto flutuante, e mesmo assim somente modificadores padrão são permitidos. Extensões não padrão no seu sprint local (3), portanto, não estão disponíveis no Perl. Ao contrário de printf. Sprintf não faz o que você provavelmente quer dizer quando você passa uma matriz como seu primeiro argumento. A matriz possui um contexto escalar e, ao invés de usar o 0º elemento da matriz como formato, o Perl usará a contagem de elementos na matriz como formato, o que quase nunca é útil. Perls sprintf permite as seguintes conversões universalmente conhecidas: Além disso, o Perl permite as seguintes conversões amplamente suportadas: Finalmente, para a compatibilidade para trás (e nós queremos dizer para trás), o Perl permite essas conversões desnecessárias mas amplamente suportadas: Observe que o número de Dígitos exponentes na notação científica produzida por e. E. g e G para números com o módulo do expoente inferior a 100 depende do sistema: pode ser três ou menos (zero-acolchoado conforme necessário). Em outras palavras, 1.23 vezes dez para 99 pode ser 1,23 e 99 ou 1,23e099. Da mesma forma para a e A. o expoente ou os dígitos hexadecimais podem flutuar: especialmente a opção de configuração Perl de duplos longos pode causar surpresas. Entre a letra e o formato, você pode especificar vários atributos adicionais que controlam a interpretação do formato. Em ordem, estes são: um índice de parâmetro de formato explícito, como 2. Por padrão, o sprintf formatará o próximo argumento não utilizado na lista, mas isso permite que você tire os argumentos fora de ordem: quando um espaço e um sinal de mais são dados Como as bandeiras ao mesmo tempo, o espaço é ignorado. Quando a bandeira e uma precisão são dadas na conversão o, a precisão é incrementada se for necessário para o líder 0. Essa bandeira indica Perl para interpretar a seqüência fornecida como um vetor de números inteiros, um para cada caractere na seqüência de caracteres. Perl aplica o formato a cada inteiro, por sua vez, junta as seqüências resultantes com um separador (um ponto por padrão). Isso pode ser útil para exibir valores ordinais de caracteres em cadeias arbitrárias: Coloque um asterisco antes do v para substituir a seqüência de caracteres para usar para separar os números: Você também pode especificar explicitamente o número do argumento para usar para a seqüência de junção usando algo como 2v para Exemplo: os argumentos geralmente são formatados para serem tão amplos quanto necessário para exibir o valor fornecido. Você pode substituir a largura colocando um número aqui ou obter a largura do próximo argumento (com) ou de um argumento especificado (por exemplo, com 2): Se uma largura de campo obtida através é negativa, ele tem o mesmo efeito que o - Flag: justificação à esquerda. Você pode especificar uma precisão (para conversões numéricas) ou uma largura máxima (para conversões de string), especificando um. Seguido por um número. Para formatos de ponto flutuante, exceto g e G. isso especifica quantos lugares a direita do ponto decimal para mostrar (o padrão sendo 6). Por exemplo: Para g e G, isso especifica o número máximo de dígitos a mostrar, incluindo aqueles anteriores ao ponto decimal e aqueles depois dele, por exemplo: Para conversões inteiras, especificar uma precisão implica que a saída do próprio número deve ser zero - pavimentado para essa largura, onde a bandeira 0 é ignorada: para conversões de string, especificar uma precisão trunca a string para ajustar a largura especificada: você também pode obter a precisão do próximo argumento usando ... ou de um argumento especificado (por exemplo, com .2): Se uma precisão obtida através é negativa, ela não tem nenhuma precisão. Para conversões numéricas, você pode especificar o tamanho para interpretar o número como usando l. H. V. q. L. ou ll. Para conversões inteiras (duox X bi DUO), os números geralmente são assumidos como sendo qualquer que seja o tamanho inteiro padrão na sua plataforma (geralmente 32 ou 64 bits), mas você pode substituir isso para usar em vez disso um dos tipos C padrão, como suportado Pelo compilador usado para criar o Perl: a partir de 5.14, nenhum desses levanta uma exceção se eles não forem suportados em sua plataforma. No entanto, se os avisos estiverem ativados, um aviso da classe de aviso printf será emitido em um sinalizador de conversão não suportado. Em vez disso, você prefere uma exceção, faça isso: se você gostaria de saber sobre uma dependência de versão antes de começar a executar o programa, coloque algo como este no topo: Você pode descobrir se o seu Perl é compatível com quads via Config: Conversões de pontos (efg EFG), os números geralmente são assumidos como o tamanho de ponto flutuante padrão em sua plataforma (dupla ou dupla longa), mas você pode forçar o duplo longo com q. L. ou ll se sua plataforma os suportar. Você pode descobrir se o seu Perl suporta longos duplos via Config: Você pode descobrir se o Perl considera longo o dobro para ser o tamanho de ponto flutuante padrão para usar em sua plataforma via Config: também pode ser que duplas e duplas longas sejam iguais Coisa: O especificador de tamanho V não tem efeito para o código Perl, mas é suportado para compatibilidade com o código XS. Significa usar o tamanho padrão para um número Inteiro Perl ou flutuante, o que é o padrão. Normalmente, o sprintf leva o próximo argumento não usado como o valor ao formato para cada especificação de formato. Se a especificação de formato usa para exigir argumentos adicionais, estes são consumidos a partir da lista de argumentos na ordem em que aparecem na especificação de formato antes do valor para formatar. Quando um argumento é especificado por um índice explícito, isso não afeta a ordem normal para os argumentos, mesmo quando o índice explicitamente especificado teria sido o próximo argumento. Usa a para a largura, b para a precisão e c como o valor para formatar enquanto: usaria um para a largura e precisão, e b como o valor para formatar. Aqui estão alguns outros exemplos, esteja ciente de que, ao usar um índice explícito, talvez seja necessário escapar: se a localidade de uso (incluindo locale 39: notcharacters39) estiver em vigor e POSIX :: setlocale foi chamado, o caractere usado para o separador decimal em Os números de ponto flutuante formatados são afetados pelo local LCNUMERIC. Veja Perllocale e POSIX.
Комментариев нет:
Отправить комментарий