Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Os tipos numéricos de vírgula flutuante representam números reais. Todos os tipos numéricos de vírgula flutuante são tipos de valor. Eles também são tipos simples e podem ser inicializados com literais. Todos os tipos numéricos de vírgula flutuante suportam operadores aritméticos, de comparação e de igualdade .
Características dos tipos de vírgula flutuante
O C# suporta os seguintes tipos de ponto flutuante predefinidos:
| Tipo/palavra-chave C# | Intervalo aproximado | Precisão | Tamanho | Tipo .NET |
|---|---|---|---|---|
float |
±1,5 x 10−45 a ±3,4 x 1038 | ~6-9 dígitos | 4 bytes | System.Single |
double |
±5,0 × 10−324 a ±1,7 × 10308 | ~15-17 dígitos | 8 bytes | System.Double |
decimal |
±1,0 x 10-28 a ±7,9228 x 1028 | 28-29 dígitos | 16 bytes | System.Decimal |
Na tabela anterior, cada palavra-chave de tipo C# da coluna mais à esquerda é um alias para o tipo .NET correspondente. São intercambiáveis. Por exemplo, as seguintes declarações declaram variáveis do mesmo tipo:
double a = 12.3;
System.Double b = 12.3;
O valor padrão de cada tipo de vírgula flutuante é zero, 0. Cada um dos tipos de vírgula flutuante tem as MinValue constantes e MaxValue que fornecem o valor finito mínimo e máximo desse tipo. Os float tipos e double também fornecem constantes que representam valores não-a-número e infinitos. Por exemplo, o double tipo fornece as seguintes constantes: Double.NaN, Double.NegativeInfinitye Double.PositiveInfinity.
O decimal tipo é adequado quando o grau de precisão exigido é determinado pelo número de algarismos à direita da casa decimal. Esses números são comumente usados em aplicações financeiras, para valores de moeda (por exemplo, $1,00), taxas de juros (por exemplo, 2,625%), e assim por diante. Mesmo números que são precisos para apenas um dígito decimal são manipulados com mais precisão pelo decimal tipo: 0.1, por exemplo, pode ser representado exatamente por uma decimal instância, enquanto não há nenhuma double instância OR float que represente exatamente 0.1. Devido a essa diferença nos tipos numéricos, erros de arredondamento inesperados podem ocorrer em cálculos aritméticos quando você usa double ou float para dados decimais. Você pode usar double em vez de decimal quando otimizar o desempenho é mais importante do que garantir a precisão. No entanto, qualquer diferença no desempenho passaria despercebida por todos, exceto pelos aplicativos mais intensivos em cálculo. Outra possível razão a evitar decimal é minimizar os requisitos de armazenamento. Por exemplo, ML.NET usa float porque a diferença entre 4 bytes e 16 bytes se soma para conjuntos de dados muito grandes. Para obter mais informações, consulte System.Decimal.
Você pode misturar tipos integrais e os float tipos e em double uma expressão. Neste caso, os tipos integrais são implicitamente convertidos em um dos tipos de vírgula flutuante e, se necessário, o float tipo é implicitamente convertido em double. A expressão é avaliada da seguinte forma:
- Se houver
doubletipo na expressão, a expressão será avaliada paradouble, ou paraboolem comparações relacionais e de igualdade. - Se não houver nenhum
doubletipo na expressão, a expressão será avaliada parafloat, ou paraboolem comparações relacionais e de igualdade.
Você também pode misturar tipos integrais e o decimal tipo em uma expressão. Neste caso, os tipos integrais são implicitamente convertidos para o decimal tipo e a expressão avalia para decimal, ou para bool em comparações relacionais e de igualdade.
Não é possível misturar o decimal tipo com os float tipos e double em uma expressão. Nesse caso, se você quiser executar operações aritméticas, de comparação ou de igualdade, deverá converter explicitamente os operandos de ou para o decimal tipo, como mostra o exemplo a seguir:
double a = 1.0;
decimal b = 2.1m;
Console.WriteLine(a + (double)b);
Console.WriteLine((decimal)a + b);
Você pode usar cadeias de caracteres de formato numérico padrão ou cadeias de caracteres de formato numérico personalizado para formatar um valor de ponto flutuante.
Literais reais
O tipo de um literal real é determinado pelo seu sufixo da seguinte forma:
- O literal sem sufixo ou com o ou
Dsufixodé do tipodouble - O literal com o sufixo
fouFé do tipofloat - O literal com o sufixo
mouMé do tipodecimal
O código a seguir demonstra um exemplo de cada um:
double d = 3D;
d = 4d;
d = 3.934_001;
float f = 3_000.5F;
f = 5.4f;
decimal myMoney = 3_000.5m;
myMoney = 400.75M;
O exemplo anterior também mostra o uso de _ como um separador de dígitos. Você pode usar o separador de dígitos com todos os tipos de literais numéricos.
Você também pode usar notação científica, ou seja, especificar uma parte expoente de um literal real, como mostra o exemplo a seguir:
double d = 0.42e2;
Console.WriteLine(d); // output 42
float f = 134.45E-2f;
Console.WriteLine(f); // output: 1.3445
decimal m = 1.5E6m;
Console.WriteLine(m); // output: 1500000
Conversões
Há apenas uma conversão implícita entre tipos numéricos de vírgula flutuante: de float para double. No entanto, você pode converter qualquer tipo de ponto flutuante em qualquer outro tipo de ponto flutuante com o elenco explícito. Para obter mais informações, consulte Conversões numéricas internas.
Especificação da linguagem C#
Para obter mais informações, consulte as seguintes seções da especificação da linguagem C#: