Resumo : neste tutorial, você aprenderá como usar os tipos float C# para representar números de ponto flutuante.
Introdução aos tipos flutuantes C#
Para representar números reais, C# usa os seguintes tipos de números flutuantes float
: double
e decimal
. A tabela a seguir mostra as características dos tipos de ponto flutuante:
Tipo flutuante | Alcance aproximado | Precisão | Tamanho |
---|---|---|---|
float |
±1,5 x 10 −45 a ±3,4 x 10 38 | ~6-9 dígitos | 4 bytes |
double |
±5,0 × 10 −324 a ±1,7 × 10 308 | ~15-17 dígitos | 8 bytes |
decimal |
±1,0 x 10 -28 a ±7,9228 x 10 28 | 28-29 dígitos | 16 bytes |
Teste de igualdade
Como os computadores só podem armazenar números de ponto flutuante aproximadamente, isso causará um comportamento inesperado se você tentar comparar dois números flutuantes.
Por exemplo, a seguinte expressão deve retornar true
:
0.3 == 0.1 + 0.1 + 01;
Linguagem de código: C# ( cs )
Mas em vez disso ele retorna false
:
bool result = 0.3 == 0.1 + 0.1 + 01;
Console.WriteLine(result); // false
Linguagem de código: C# ( cs )
A razão é que a expressão retorna um valor aproximadamente igual a 0,3, não 0,3. Veja o seguinte:
Console.WriteLine(0.1 + 0.1 + 0.1);
Linguagem de código: C# ( cs )
Saída:
0.30000000000000004
Linguagem de código: C# ( cs )
Literais flutuantes
Cada tipo float possui uma forma literal específica. E todos os literais flutuantes podem ter o separador de dígitos ( _
) para torná-los mais legíveis.
flutuador
Os literais float têm o sufixo f
ou F
. Por exemplo:
float rate = 5.2F;
float amount = 10_000.5f;
Linguagem de código: C# ( cs )
dobro
Os literais duplos não têm sufixo. Por exemplo:
double dimension = 3.14
double radius = 1_000.5
Linguagem de código: C# ( cs )
Ou com o sufixo d
ou D
assim:
double dimension = 3.14d
double radius = 1_000.5D
Linguagem de código: C# ( cs )
decimal
Os literais decimais têm m
ou M
sufixo:
decimal amount = 9.99m
decimal tax = 0.08M
Linguagem de código: C# ( cs )
Conversões
C# converte implicitamente um valor de float em double. No entanto, você pode usar uma conversão explícita para converter um valor de um tipo de ponto flutuante para outro.
Resumo
- C# usa os tipos
float
,double
edemical
para representar números reais. - Evite usar o operador de igualdade
==
para comparar dois números reais.