Logo

Números literais escritos no tipo desejado

Já teve algum problema onde o seu cálculo estava saindo sem as casas decimais? (o resultado ficava um inteiro), ou teve que fazer uma conversão explicita para float ou decimal após realizar um cálculo para então poder passar o resultado em uma função qualquer?

Provavelmente você utilizou um literal sem definir o seu tipo!

Para compreender melhor, vamos supor um cenário onde você precisa fazer uma regra de 3 para descobrir um percentual. Tenho uma janela e quero saber o quanto em percentual de largura ela está ocupando da minha tela.

1024 pixels é a largura total da tela, portanto é 100% do espaço. 567 pixels é a largura da janela, quanto em percentual isso significa? Vamos para a "regra de 3":

static void Main(string[] args)

{

    int larguraTela = 1024;

    int larguraJanela = 567;

 

    var percentualJanela = larguraJanela * 100 / larguraTela;

 

    Console.WriteLine("A janela está ocupando {0}% da largura da tela!", percentualJanela);

    Console.ReadKey();

 

    // Imprime no console:

    // A janela está ocupando 55% da largura da tela!

}

Fazendo na calculadora, podemos ver que o nosso resultado (percentual da janela) é "55,37109375%", o que aconteceu?

Quando o seu cálculo só utiliza elementos do tipo "inteiro", o resultado será do mesmo tipo, isso é uma convenção em linguagens de programação, não é aplicado somente ao C#, já me deparei com várias linguagens que se comportam da mesma maneira.

Como fazer para ter precisão de casas decimais nesse cálculo?

Basta que um elemento qualquer envolvido no cálculo tenha essa precisão, como já é conhecido pela maioria, no C# temos o double, float e o decimal, cada um com a sua precisão, sendo a escolha baseada na sua necessidade. Então converto uma variável qualquer para um desses tipos? Nesse exemplo da regra de 3 não é necessário, como temos o literal "100", basta dizer para o compilador que você, programador, escreveu alí um número decimal, não um inteiro, como fazer isso?

Finalmente chegamos ao ponto alvo desse post, que é apresentar como se escreve em "hard code" números já no seu respectivo tipo:

var d = 1.0d; // double (ou sem a letra 'd', 1.0 é considerado como double também)

var f = 1.0f; // float

var m = 1.0m; // decimal

var i = 1; // int (sem nenhuma letra, é int)

var ui = 1U; // uint

var ul = 1UL; // ulong

var l = 1L; // long

E voltando ao nosso código, agora escrevendo 100m.

static void Main(string[] args)

{

    int larguraTela = 1024;

    int larguraJanela = 567;

 

    var percentualJanela = larguraJanela * 100m / larguraTela;

 

    Console.WriteLine("A janela está ocupando {0}% da largura da tela!", percentualJanela);

    Console.ReadKey();

 

    // Imprime no console:

    // A janela está ocupando 55,37109375% da largura da tela!

}

Pronto, agora o resultado é 55,37109375%, mais um problema resolvido. Até a próxima pessoal.