Sequências de Caracteres de Formato Numérico Padrão
Sequências de Caracteres de Formatação Numérica Padrão são usadas para formatar tipos numéricos comuns.Uma sequência de caracteres de formato numérico padrão assume a forma Axx, onde A é um caractere alfabético chamado de especificador de formato e xx é um inteiro opcional chamado de especificador de precisão.O especificador de precisão varia de 0 a 99 e afeta o número de dígitos no resultado.Qualquer sequência de caracteres de formato numérico que contenha mais de um caractere alfabético, incluindo espaço em branco, é interpretada como uma sequência de formato numérico personalizado.
A tabela a seguir descreve os especificadores de formato numérico padrão e exibe exemplos de saída produzidas por cada especificador de formato.Para obter mais informações, consulte as notas que seguem a tabela.
Especificador de Formato |
Nome |
Descrição |
---|---|---|
C ou c |
Moeda |
O número é convertido para uma sequência que representa um valor de moeda.A conversão é controlada pelas informações de formato da moeda do objeto NumberFormatInfo atual. O especificador de precisão indica o número de casas decimais desejadas.Se o especificador deprecisão for omitido, a precisão de moeda padrão fornecida pelo objeto NumberFormatInfo atual será usada. O exemplo a seguir formata um valor Double com o especificador de formato de moeda.
|
D ou d |
Decimal |
Esse formato é suportado apenas para tipos inteiros.O número é convertido para uma sequência de dígitos decimais (0-9), prefixados por um sinal de menos se o número for negativo. O especificador de precisão indica o número mínimo de dígitos desejados na sequência resultante.Se necessário, o número é preenchido com zeros à esquerda para produzir o número de dígitos fornecido pelo especificador de precisão. O exemplo a seguir formata um valor Int32 com o especificador de formato decimal.
|
E ou e |
Científica (exponencial) |
O número é convertido em uma sequência de caracteres do formulário "-d.ddd…E+ddd" ou "-d.ddd…e+ddd", onde cada seria 'd' indica um dígito (0-9).A sequência inicia com um sinal de menos se o número for negativo.Um dígito sempre precede a ponto decimal. O especificador de precisão indica o número desejado de dígitos após o ponto decimal.Se o especificador de precisão for omitido, um padrão de seis dígitos após o ponto decimal é usado. A caixa do especificador de formato indica se o expoente for prefixado com um 'E' ou um 'e'.O expoente sempre é constituído de um sinal de mais ou de menos e um mínimo de três dígitos.O exponente é preenchido com zeros para atender esse mínimo, se necessário. O exemplo a seguir formata um valor Double com o especificador de formato científico.
|
F ou f |
Ponto fixo |
O número é convertido em uma sequência de caracteres do formulário "-ddd.ddd…" onde cada 'd' indica um dígito (0-9).A sequência inicia com um sinal de menos se o número for negativo. O especificador de precisão indica o número de casas decimais desejadas.Se o especificador de precisão for omitido, a precisão numérica padrão é dada pela propriedade NumberDecimalDigits do objeto NumberFormatInfo atual. O exemplo a seguir formata um valor Double e um valor Int32 com o especificador de formato de ponto fixo.
|
G ou g |
Geral |
O número é convertido para a notação de ponto fixo ou científica que seja mais compacta, dependendo do tipo do número e se um especificador de precisão está presente.Se o especificador de precisão for omitido ou for zero, o tipo do número determina a precisão padrão, conforme indicado pela lista a seguir. A notação de ponto fixo é usada se o expoente que resultaria ao expressar o número na notação científica é maior do que -5 e menor que o especificador de precisão; caso contrário, a notação científica é usada.Se necessário, o resultado contém um ponto decimal e os zeros à direita são omitidos.Se o especificador de precisão estiver presente e o número de dígitos significativos no resultado excede a precisão especificada, então o excesso de dígitos à direita será removido por arredondamento. A exceção à regra anterior é se o número for um Decimal e o especificador de padrão for omitido.Nesse caso, a notação de ponto fixo é sempre usada e zeros à direita são preservados. Se a notação científica for usada, o expoente no resultado é prefixado com 'E' se o especificador de formato for 'G', ou 'e' se o especificador de formato é 'g'. O exemplo a seguir formata valores de ponto flutuante variados com o especificador de formato geral.
|
N ou n |
Número |
O número é convertido em uma sequência de caracteres do formulário "-d,ddd,ddd.ddd…", onde '-' indica um símbolo de número negativo, se necessário, 'd' indica um dígito (0-9), ',' indica um separador de milhar entre grupos de número, e '.' indica um símbolo de ponto decimal.O padrão de número negativo real, tamanho do grupo numérico, separador de milhar e separador decimal são especificados pelas propriedades NumberNegativePattern,NumberGroupSizes,NumberGroupSeparator e NumberDecimalSeparator, respectivamente, do objetoNumberFormatInfo atual. O especificador de precisão indica o número de casas decimais desejadas.Se o especificador de precisão for omitido, a precisão numérica padrão é dada pela propriedade NumberDecimalDigits do objeto NumberFormatInfo atual. O exemplo a seguir formata valores de ponto flutuante variados com o especificador de formato numérico.
|
P ou p |
Porcentagem |
O número é convertido em uma sequência de caracteres que representa um porcentagem conforme definido pela propriedade NumberFormatInfo.PercentNegativePattern se o número for negativo, ou pela propriedade NumberFormatInfo.PercentPositivePattern se o número for positivo.O número convertido é multiplicado por 100 para ser apresentado como uma porcentagem. O especificador de precisão indica o número de casas decimais desejadas.Se o especificador deprecisão for omitido, a precisão numérica padrão fornecida pelo objeto NumberFormatInfo atual será usada. O exemplo a seguir formata valores de ponto flutuante variados com o especificador de formato de percentagem.
|
R ou r |
Processamento |
Esse formato é suportado apenas para os tipos Single e Double.Especificador de processamento garante que um valor numérico convertido em uma sequência de caracteres será analisado de volta ao mesmo valor numérico.Quando um valor numérico é formatado usando esse especificador, ele é primeiro testado usando o formato geral, com 15 espaços de precisão para um Double e 7 espaços de precisão para um Single .Se o valor é analisado com êxito de volta ao mesmo valor numérico, ele é formatado usando o especificador de formato geral.No entanto, se o valor é analisado com êxito de volta para o mesmo valor numérico, em seguida, o valor é formatado usando 17 dígitos de precisão para um Double e 9 dígitos de precisão para um Single . Embora um especificador de precisão possa estar presente, ele será ignorado.O processamento recebe precedência sobre a precisão ao usar esse especificador. O exemplo a seguir formata valores Double com o especificador de formato de processamento.
|
X ou x |
Hexadecimal |
Esse formato é suportado apenas para tipos inteiros.O número é convertido para uma sequência de dígitos hexadecimais.No caso do especificador de formato indica se é necessário usar caracteres maiúsculos ou minúsculos para os dígitos hexadecimais maiores que 9.Por exemplo, use 'X' para produzir "ABCDEF" e 'x' para produzir "abcdef". O especificador de precisão indica o número mínimo de dígitos desejados na sequência resultante.Se necessário, o número é preenchido com zeros à esquerda para produzir o número de dígitos fornecido pelo especificador de precisão. O exemplo a seguir formata valores Int32 com o especificador de formato hexadecimal.
|
Qualquer outro caractere único |
(Especificador desconhecido) |
(Um especificador desconhecido gera uma FormatException em tempo de execução.) |
Anotações
Configurações do Painel de controle
As configurações no item Opções regionais e de idioma no Painel de Controle influenciam a sequência de resultado produzida por uma operação de formatação.Essas configurações são usadas para inicializar o objeto NumberFormatInfo associado a cultura de segmento atual, que fornece valores usados para controlar a formatação.Computadores usando configurações diferentes vão gerar diferentes sequências de caracteres como resultado.
Além disso, se o construtor CultureInfo.CultureInfo(String) for usado para criar uma instância de um novo objeto CultureInfo que representa a mesma cultura que a cultura atual do sistema, quaisquer personalizações estabelecidas pelo item Opções Regionais e de Idioma no Painel de controle serão aplicadas ao novo objeto CultureInfo.Você pode usar o método CultureInfo.CreateSpecificCulture para criar um CultureInfo que não reflita a adaptações de um sistema.
Propriedades de NumberFormatInfo
A formatação é influenciada pelas propriedades do objeto NumberFormatInfo atual, que é fornecido implicitamente pela cultura de segmento atual ou explicitamente pelo parâmetro IFormatProvider do método que invoca a formatação.Especifique um objeto NumberFormatInfo ou CultureInfo para esse parâmetro.
Tipos numéricos inteiros e pontos flutuantes
Algumas descrições dos especificadores de formato numérico padrão se referem a tipos inteiros ou de ponto flutuante.Os tipos numéricos de inteiros são Byte, SByte, Int16, Int32, Int64, UInt16, UInt32 e UInt64.Os tipos numéricos de ponto flutuante são Decimal, Single e Double.
Pontos Flutuantes Infinitos e NaN (Não Números)
Observe que, independentemente da sequência de caracteres de formato, se o valor de um tipo ponto flutuante éSingle ou Double infinito positivo, negativo infinito ou um não número (NaN), a sequência de caracteres formatada é o valor das respectivas propriedades PositiveInfinitySymbol os respectivos, NegativeInfinitySymbol ou NaNSymbol especificada pelo objeto NumberFormatInfo aplicável no momento.
Exemplo
O exemplo a seguir formata um inteiro e um valor numérico de ponto flutuante usando a cultura en-us e todos os especificadores de formato numérico padrão.Este exemplo usa dois tipos numéricos específicos, mas poderia produzir resultados semelhantes para qualquer um dos tipos base numéricos (Byte,SByte,Int16,Int32,Int64,UInt16,UInt32,UInt64,Decimal,Single e Double).
Option Strict On
Imports System.Globalization
Imports System.Threading
Module NumericFormats
Public Sub Main()
' Display string representations of numbers for en-us culture
Dim ci As New CultureInfo("en-us")
' Output floating point values
Dim floating As Double = 10761.937554
Console.WriteLine("C: {0}", _
floating.ToString("C", ci)) ' Displays "C: $10,761.94"
Console.WriteLine("E: {0}", _
floating.ToString("E03", ci)) ' Displays "E: 1.076E+004"
Console.WriteLine("F: {0}", _
floating.ToString("F04", ci)) ' Displays "F: 10761.9376"
Console.WriteLine("G: {0}", _
floating.ToString("G", ci)) ' Displays "G: 10761.937554"
Console.WriteLine("N: {0}", _
floating.ToString("N03", ci)) ' Displays "N: 10,761.938"
Console.WriteLine("P: {0}", _
(floating/10000).ToString("P02", ci)) ' Displays "P: 107.62 %"
Console.WriteLine("R: {0}", _
floating.ToString("R", ci)) ' Displays "R: 10761.937554"
Console.WriteLine()
' Output integral values
Dim integral As Integer = 8395
Console.WriteLine("C: {0}", _
integral.ToString("C", ci)) ' Displays "C: $8,395.00"
Console.WriteLine("D: {0}", _
integral.ToString("D6")) ' Displays D: 008395""
Console.WriteLine("E: {0}", _
integral.ToString("E03", ci)) ' Displays "E: 8.395E+003"
Console.WriteLine("F: {0}", _
integral.ToString("F01", ci)) ' Displays "F: 8395.0"
Console.WriteLine("G: {0}", _
integral.ToString("G", ci)) ' Displays "G: 8395"
Console.WriteLine("N: {0}", _
integral.ToString("N01", ci)) ' Displays "N: 8,395.0"
Console.WriteLine("P: {0}", _
(integral/10000).ToString("P02", ci)) ' Displays "P: 83.95 %"
Console.WriteLine("X: 0x{0}", _
integral.ToString("X", ci)) ' Displays "X: 0x20CB"
Console.WriteLine()
End Sub
End Module
using System;
using System.Globalization;
using System.Threading;
public class NumericFormats
{
public static void Main()
{
// Display string representations of numbers for en-us culture
CultureInfo ci = new CultureInfo("en-us");
// Output floating point values
double floating = 10761.937554;
Console.WriteLine("C: {0}",
floating.ToString("C", ci)); // Displays "C: $10,761.94"
Console.WriteLine("E: {0}",
floating.ToString("E03", ci)); // Displays "E: 1.076E+004"
Console.WriteLine("F: {0}",
floating.ToString("F04", ci)); // Displays "F: 10761.9376"
Console.WriteLine("G: {0}",
floating.ToString("G", ci)); // Displays "G: 10761.937554"
Console.WriteLine("N: {0}",
floating.ToString("N03", ci)); // Displays "N: 10,761.938"
Console.WriteLine("P: {0}",
(floating/10000).ToString("P02", ci)); // Displays "P: 107.62 %"
Console.WriteLine("R: {0}",
floating.ToString("R", ci)); // Displays "R: 10761.937554"
Console.WriteLine();
// Output integral values
int integral = 8395;
Console.WriteLine("C: {0}",
integral.ToString("C", ci)); // Displays "C: $8,395.00"
Console.WriteLine("D: {0}",
integral.ToString("D6", ci)); // Displays D: 008395""
Console.WriteLine("E: {0}",
integral.ToString("E03", ci)); // Displays "E: 8.395E+003"
Console.WriteLine("F: {0}",
integral.ToString("F01", ci)); // Displays "F: 8395.0"
Console.WriteLine("G: {0}",
integral.ToString("G", ci)); // Displays "G: 8395"
Console.WriteLine("N: {0}",
integral.ToString("N01", ci)); // Displays "N: 8,395.0"
Console.WriteLine("P: {0}",
(integral/10000).ToString("P02", ci)); // Displays "P: 83.95 %"
Console.WriteLine("X: 0x{0}",
integral.ToString("X", ci)); // Displays "X: 0x20CB"
Console.WriteLine();
}
}
Consulte também
Conceitos
Sequências de caracteres de formato numérico
Sequências de Caracteres de Formato Numérico Personalizado