Conversão de um número decimal em número duplo em C # resulta em uma diferença

Resumo do problema:

Para alguns valores decimais, quando convertemos o tipo de decimal em double, uma pequena fração é adicionada ao resultado.

O que o torna pior, é que pode haver dois valores decimais "iguais" que resultam em valores duplos diferentes quando convertidos.

Amostra de código:

decimal dcm = 8224055000.0000000000m;  // dcm = 8224055000
double dbl = Convert.ToDouble(dcm);    // dbl = 8224055000.000001

decimal dcm2 = Convert.ToDecimal(dbl); // dcm2 = 8224055000
double dbl2 = Convert.ToDouble(dcm2);  // dbl2 = 8224055000.0

decimal deltaDcm = dcm2 - dcm;         // deltaDcm = 0
double deltaDbl = dbl2 - dbl;          // deltaDbl = -0.00000095367431640625

Veja os resultados nos comentários. Os resultados são copiados do relógio do depurador. Os números que produzem esse efeito têm muito menos dígitos decimais do que o limite dos tipos de dados, portanto, não pode ser um estouro (eu acho!).

O que torna muito mais interessante é que pode haver doisigual valores decimais (no exemplo de código acima, veja "dcm" e "dcm2", com "deltaDcm" igual a zero) resultando emdiferente valores duplos quando convertidos. (No código, "dbl" e "dbl2", que têm um "deltaDbl" diferente de zero)

Eu acho que deve ser algo relacionado à diferença na representação bit a bit dos números nos dois tipos de dados, mas não consigo descobrir o que! E eu preciso saber o que fazer para fazer a conversão do jeito que eu preciso que seja. (como dcm2 -> dbl2)

questionAnswers(5)

yourAnswerToTheQuestion