Como um elenco double
para decimal
qual é usado ao fazer o desenvolvimento da moeda. Para onde M
vai?
decimal dtot = (decimal)(doubleTotal);
Você só usa M
para um literal numérico, ao lançar é apenas:
decimal dtot = (decimal)doubleTotal;
Observe que um número de ponto flutuante não é adequado para manter um valor exato, portanto, se você primeiro somar os números e depois converter para, Decimal
poderá obter erros de arredondamento. Você pode querer converter os números em Decimal
antes de adicioná-los, ou certifique-se de que os números não são números de ponto flutuante em primeiro lugar.
Você pode converter um duplo em um decimal assim, sem precisar do
M
sufixo literal:Você deve usar o
M
ao declarar um novo valor decimal literal:(Sem o
M
, 123,45 é tratado como um duplo e não será compilado.)fonte
use a classe de conversão padrão:
Convert.ToDecimal(Double)
fonte
fonte
double
paradecimal
, dado que para umdouble
valor como (1000000.0 / 3.0), seria em alguns casos deseja cortar a precisão "excessiva" produzindo 333333.333333333D, mas em outros casos, seria desejável retê-la, gerando 333333.333333333313931D. Em vez de simplesmente dizer "converter em decimal", o código deve especificar como essa conversão deve ser realizada.Convert.ToDecimal(double)
é o mesmo que(decimal)doubleTotal
, exceto se fordoubleTotal
alterado para um tipo diferente, você provavelmente evitará um erro de tempo de compilação e introduzirá um erro de tempo de execução mais difícil de encontrar porque um ToDecimal diferente override pode ser chamado. O operador de elenco é muito mais explícito ...Bem, esta é uma pergunta antiga e eu realmente usei algumas das respostas mostradas aqui. No entanto, em meu cenário específico, era possível que o
double
valor para o qual eu queria converterdecimal
fosse geralmente maior do quedecimal.MaxValue
. Então, em vez de lidar com exceções, escrevi este método de extensão:A abordagem acima funciona se você não quiser se preocupar em lidar com exceções de estouro e se tal coisa acontecer, você deseja apenas manter o valor máximo possível (meu caso), mas estou ciente de que para muitos outros cenários este não seria o comportamento esperado e pode ser a manipulação de exceção será necessária.
fonte