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.

Dim value As Double = 12345.6789
Console.WriteLine(value.ToString("C", CultureInfo.InvariantCulture))
' Displays 12,345.68
Console.WriteLine(value.ToString("C3", CultureInfo.InvariantCulture))
' Displays 12,345.679
Console.WriteLine(value.ToString("C3", _
CultureInfo.CreateSpecificCulture("en-US")))
' Displays $12,345.679
double value = 12345.6789;
Console.WriteLine(value.ToString("C", CultureInfo.InvariantCulture));
// Displays 12,345.68
Console.WriteLine(value.ToString("C3", CultureInfo.InvariantCulture));
// Displays 12,345.679
Console.WriteLine(value.ToString("C3",
CultureInfo.CreateSpecificCulture("en-US")));
// Displays $12,345.679

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.

Dim value As Integer
value = 12345
Console.WriteLine(value.ToString("D"))
' Displays 12345
Console.WriteLine(value.ToString("D8"))
' Displays 00012345
value = -12345
Console.WriteLine(value.ToString("D"))
' Displays -12345
Console.WriteLine(value.ToString("D8"))
' Displays -00012345
int value;
value = 12345;
Console.WriteLine(value.ToString("D"));
// Displays 12345
Console.WriteLine(value.ToString("D8"));
// Displays 00012345
value = -12345;
Console.WriteLine(value.ToString("D"));
// Displays -12345
Console.WriteLine(value.ToString("D8"));
// Displays -00012345

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.

Dim value As Double = 12345.6789
Console.WriteLine(value.ToString("E", CultureInfo.InvariantCulture))
' Displays 1.234568E+004
Console.WriteLine(value.ToString("E10", CultureInfo.InvariantCulture))
' Displays 1.2345678900E+004
Console.WriteLine(value.ToString("e4", CultureInfo.InvariantCulture))
' Displays 1.2346e+004
Console.WriteLine(value.ToString("E", _
CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 1,234568E+004
double value = 12345.6789;
Console.WriteLine(value.ToString("E", CultureInfo.InvariantCulture));
// Displays 1.234568E+004
Console.WriteLine(value.ToString("E10", CultureInfo.InvariantCulture));
// Displays 1.2345678900E+004
Console.WriteLine(value.ToString("e4", CultureInfo.InvariantCulture));
// Displays 1.2346e+004
Console.WriteLine(value.ToString("E",
CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 1,234568E+004

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.

Dim integerNumber As Integer
integerNumber = 17843
Console.WriteLine(integerNumber.ToString("F", CultureInfo.InvariantCulture))
' Displays 17843.00
integerNumber = -29541
Console.WriteLine(integerNumber.ToString("F3", CultureInfo.InvariantCulture))
' Displays -29541.000
Dim doubleNumber As Double
doubleNumber = 18934.1879
Console.WriteLine(doubleNumber.ToString("F", CultureInfo.InvariantCulture))
' Displays 18934.19
Console.WriteLine(doubleNumber.ToString("F0", CultureInfo.InvariantCulture))
' Displays 18934
doubleNumber = -1898300.1987
Console.WriteLine(doubleNumber.ToString("F1", CultureInfo.InvariantCulture))
' Displays -1898300.2
Console.WriteLine(doubleNumber.ToString("F3", _
CultureInfo.CreateSpecificCulture("es-ES")))
' Displays -1898300,199
int integerNumber;
integerNumber = 17843;
Console.WriteLine(integerNumber.ToString("F",
CultureInfo.InvariantCulture));
// Displays 17843.00
integerNumber = -29541;
Console.WriteLine(integerNumber.ToString("F3",
CultureInfo.InvariantCulture));
// Displays -29541.000
double doubleNumber;
doubleNumber = 18934.1879;
Console.WriteLine(doubleNumber.ToString("F", CultureInfo.InvariantCulture));
// Displays 18934.19
Console.WriteLine(doubleNumber.ToString("F0", CultureInfo.InvariantCulture));
// Displays 18934
doubleNumber = -1898300.1987;
Console.WriteLine(doubleNumber.ToString("F1", CultureInfo.InvariantCulture));
// Displays -1898300.2
Console.WriteLine(doubleNumber.ToString("F3",
CultureInfo.CreateSpecificCulture("es-ES")));
// Displays -1898300,199

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.

Dim number As Double
number = 12345.6789
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture))
' Displays 12345.6789
Console.WriteLine(number.ToString("G", _
CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 12345,6789
Console.WriteLine(number.ToString("G7", CultureInfo.InvariantCulture))
' Displays 12345.68
number = .0000023
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture))
' Displays 2.3E-06
Console.WriteLine(number.ToString("G", _
CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 2,3E-06
number = .0023
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture))
' Displays 0.0023
number = 1234
Console.WriteLine(number.ToString("G2", CultureInfo.InvariantCulture))
' Displays 1.2E+03
number = Math.Pi
Console.WriteLine(number.ToString("G5", CultureInfo.InvariantCulture))
' Displays 3.1416
double number;
number = 12345.6789;
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture));
// Displays 12345.6789
Console.WriteLine(number.ToString("G",
CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 12345,6789
Console.WriteLine(number.ToString("G7", CultureInfo.InvariantCulture));
// Displays 12345.68
number = .0000023;
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture));
// Displays 2.3E-06
Console.WriteLine(number.ToString("G",
CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 2,3E-06
number = .0023;
Console.WriteLine(number.ToString("G", CultureInfo.InvariantCulture));
// Displays 0.0023
number = 1234;
Console.WriteLine(number.ToString("G2", CultureInfo.InvariantCulture));
// Displays 1.2E+03
number = Math.PI;
Console.WriteLine(number.ToString("G5", CultureInfo.InvariantCulture));
// Displays 3.1416

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.

Dim dblValue As Double = -12445.6789
Console.WriteLine(dblValue.ToString("N", CultureInfo.InvariantCulture))
' Displays -12,445.68
Console.WriteLine(dblValue.ToString("N1", _
CultureInfo.CreateSpecificCulture("sv-SE")))
' Displays -12445,7
Dim intValue As Integer = 123456789
Console.WriteLine(intValue.ToString("N1", CultureInfo.InvariantCulture))
' Displays 123,456,789.0
double dblValue = -12445.6789;
Console.WriteLine(dblValue.ToString("N", CultureInfo.InvariantCulture));
// Displays -12,445.68
Console.WriteLine(dblValue.ToString("N1",
CultureInfo.CreateSpecificCulture("sv-SE")));
// Displays -12445,7
int intValue = 123456789;
Console.WriteLine(intValue.ToString("N1", CultureInfo.InvariantCulture));
// Displays 123,456,789.0

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.

Dim number As Double = .2468013
Console.WriteLine(number.ToString("P", CultureInfo.InvariantCulture))
' Displays 24.68 %
Console.WriteLine(number.ToString("P", _
CultureInfo.CreateSpecificCulture("hr-HR")))
' Displays 24,68%
Console.WriteLine(number.ToString("P1", CultureInfo.InvariantCulture))
' Displays 24.7 %
double number = .2468013;
Console.WriteLine(number.ToString("P", CultureInfo.InvariantCulture));
// Displays 24.68 %
Console.WriteLine(number.ToString("P",
CultureInfo.CreateSpecificCulture("hr-HR")));
// Displays 24,68%
Console.WriteLine(number.ToString("P1", CultureInfo.InvariantCulture));
// Displays 24.7 %

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.

Dim value As Double
value = Math.Pi
Console.WriteLine(value.ToString("r"))
' Displays 3.1415926535897931
Console.WriteLine(value.ToString("r", _
CultureInfo.CreateSpecificCulture("fr-FR")))
' Displays 3,1415926535897931
value = 1.623e-21
Console.WriteLine(value.ToString("r"))
' Displays 1.623E-21
double value;
value = Math.PI;
Console.WriteLine(value.ToString("r"));
// Displays 3.1415926535897931
Console.WriteLine(value.ToString("r",
CultureInfo.CreateSpecificCulture("fr-FR")));
// Displays 3,1415926535897931
value = 1.623e-21;
Console.WriteLine(value.ToString("r"));
// Displays 1.623E-21

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.

Dim value As Integer
value = &h2045e
Console.WriteLine(value.ToString("x"))
' Displays 2045e
Console.WriteLine(value.ToString("X"))
' Displays 2045E
Console.WriteLine(value.ToString("X8"))
' Displays 0002045E
value = 123456789
Console.WriteLine(value.ToString("X"))
' Displays 75BCD15
Console.WriteLine(value.ToString("X2"))
' Displays 75BCD15
int value;
value = 0x2045e;
Console.WriteLine(value.ToString("x"));
// Displays 2045e
Console.WriteLine(value.ToString("X"));
// Displays 2045E
Console.WriteLine(value.ToString("X8"));
// Displays 0002045E
value = 123456789;
Console.WriteLine(value.ToString("X"));
// Displays 75BCD15
Console.WriteLine(value.ToString("X2"));
// Displays 75BCD15

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

Referência

NumberFormatInfo

Outros recursos

Tipos de Formatação