Como arredondar números ou limitar dígitos depois da virgula com C#

Se voce precisa arredondar numeros para cima ou para baixo voce precisa utilizar os seguintes metodos:

  • Para que o numero seja arredondado para cima deve ser utilizado o metodo Math.Ceiling Exemplo: 51.666 será transformado em 52.00
  •  Para que o numero seja arredondado para baixo deve ser utilizado o metodo Math.Floor Exemplo: 51.666 será transformado em 51.00
Agora para limitar a quantidade de digitos de um numero é necessário utilizar o metodo Math.Round para fazer isso, como ele funciona:
Você passa o numero e a quantidade de dígitos que você quer que seja utilizado e ele faz um arredondamento automático e retorna o numero com apenas a quantidade de digitos que voce precisa depois da virgula.Exemplo:
  •  Math.Round(10.1120, 2) -> 10.11
  • Math.Round(10.1170, 2) -> 10.12
  • Math.Round(10.1172, 3) -> 10.117
  • Math.Round(10.1178, 3) -> 10.118

Enumerado com NHibernate Salvando string

Estou trabalhando com um sistema utilizando NHibernate, e utilizamos uma convenção para armazenar o valor de campos enumerados como Inteiro(Int32) e não o texto puro como é padrão do NHibernate, nos utilizamos a seguinte convenção para que isso ocorra:

public class ConvencaoEnum : IUserTypeConvention
{
   public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
   {
      criteria.Expect(x => x.Property.PropertyType.IsEnum);
   }

   public void Apply(IPropertyInstance target)
   {
      target.CustomType(target.Property.PropertyType);
   }
}

Após isso é necessário na criação do SessionFactory será necessário definir que irá utilizar essa convenção, uma forma comum é buscando pelo Assembly aonde a classe de criação do session factory está assim:

_sessionFactory = Fluently.Configure(config)
                          .Mappings(m => m.FluentMappings
                          .AddFromAssemblyOf<SessionFactoryClass>()
                          .Conventions.AddFromAssemblyOf<SessionFactoryClass>()
                          .BuildSessionFactory();

Isso estava funcionando tranquilamente até quando fui adicionar uma nova classe que iria persistir no Banco de dados e coloquei um enumerado e mesmo com a convenção ele estava armazenando string no Banco de dados, após algumas pesquisas com o pessoal que trabalho descobri que eu tinha definido o Enumerado como Nullable, removendo a possibilidade de Nullable dele e o armazenamento como inteiro desse valor voltou a funcionar.

Após fazer isso me surgiu uma divida como eu iria definir o valor dessa propriedade digamos como nula, para definir um valor nulo para um enumerado você apenas precisa fazer igual ao código abaixo

MeuEnumerado nomeVariavel = default(MeuEnumerado);

Vida util Variaveis ASP.NET (Variável Estática, Cache e Variável de sessão )

Se voce não consegue entender por que um usuário está pegando a informação de outro usuário ou qualquer outra informação de usuário está se perdendo leia esse post que irá te ajudar.

Quando trabalhamos com Asp.Net um dos pontos mais chatos de se pensar é a transferência de informações entre páginas, já ouvi muitas pessoas falando que faziam essa transferência por variável estática, outras por Cache, outras por Variáveis de sessão, porém ninguém tem noção do estrago que isso pode causar para um site ou aplicação se for utilizado errado.Os pontos relevantes sobre esses tipos de variáveis:

  • Variáveis estáticas:  Elas são armazenadas em uma ambiente global, isso significa que todas as pessoas que acessarem o site publicado no IIS irão utilizar o mesmo valor dessa variável, esse valor só será apagado quando o site no IIS é parado.
    • O que Armazernar: Valores que não são alterados, exemplo listas fixas do sistema, caminhos globais do site
    • O que não Armazernar: Valores de um determinado usuário, ou valores que variam muito para cada usuário
  • Cache:  Elas são armazenadas em uma ambiente global também, isso significa que todas as pessoas que acessarem o site publicado no IIS irão utilizar o mesmo valor dessa variável, porém esse valor possui varias variantes de quando serão apagadas, pode ser por dependência  de outra variável, ou por tempo etc.
    • O que Armazenar: valor de uma rotina que exige muito processamento, valores que possuem dependência de outros valores.
    • O que não Armazenar: Valores de um determinado usuário, ou valores que variam muito para cada usuário.
  • Variáveis de sessão: Elas são armazenadas por browser e máquina, isso significa que essa variáveis são unicas para uma máquina acessando o site e pelo browser que está acessando, se acessar esse mesmo site de outro browser a sessão não existirá,  tem vida útil enquanto a janela está aberta.
    • O que Armazenar: valores relativos a cada usuário, por exemplo usuário logado na aplicação, configurações de tema do usuário, etc.
    • O que não Armazenar: Valores globais e valores muito pesados, pois cada variável de sessão armazenada no servidor é um gasto a mais de recurso do servidor, e isso pode gerar lentidão no site por muitos usuários acessando ao mesmo tempo.

Para exemplificar melhor esse conceito criei uma aplicação que pode ser baixada AQUI (está no google docs por que não tinha outro lugar para fazer upload) que voce irá fazer o seguinte teste:

Execute a aplicação em sua máquina e defina os valores e dá um submit, ai pegue o conteúdo da URL e abra o mesmo em outro browser sem parar a aplicação no visual studio, você vai ver que os valores se mantiveram apenas o de sessão não foi mantido.

DICA: 

Para adicionar Classes que você criou em variáveis de sessão ou em variáveis de cache essas variáveis tem que herdar de ISerializable

Eventos de desenvolvimento

Segue ai os link’s para eventos bem legais que irão acontecer esse ano:

Esse evento é voltado para dotnet, porém abordas vários temas atuais e dá uma boa visão sobre arquitetura de sistemas.

Esse evento é voltado mais para a área desenvolvimento em geral, e com a presença do Martin Fowler fazendo uma palestra sobre Software Design no seculo 21.