Подтвердить что ты не робот

Почему Double не может быть явно введено в Decimal

Я не понимаю правила кастинга, когда речь идет о десятичной и двойной.

Это законно делать это

decimal dec = 10;
double doub = (double) dec;

Что меня смущает, так это то, что десятичное число - это 16-байтовый тип данных, а double - 8 байт, поэтому он не отбрасывает двойное и десятичное расширение расширяющейся беседы и поэтому должно быть разрешено неявно; с приведенным выше примером запрещенным?

4b9b3361

Ответ 1

Если вы конвертируете с double в decimal, вы можете потерять информацию - номер может быть полностью вне допустимого диапазона, так как диапазон double намного больше диапазона decimal.

Если вы конвертируете из decimal в double, вы можете потерять информацию - например, 0,1 точно представлено в decimal, но не в double, а decimal фактически использует намного больше бит для точности чем double.

Неявные преобразования не должны терять информацию (может произойти преобразование из long в double, но это другой аргумент). Если вы собираетесь потерять информацию, вам следует сообщить компилятору, что вы знаете об этом, посредством явного приведения.

Вот почему нет неявных преобразований в любом случае.

Ответ 3

Вы можете явно указать в обоих направлениях: от double до decimal и от decimal до double.

Вы не можете неявно конвертировать в любом направлении по очень веской причине: преобразование не может быть потерянным.

Например, десятичное число 1234567890123456789 не может быть точно представлено как double. Аналогично, двойное число 10^32 не может быть точно представлено как десятичное число.

Чтобы избежать потери информации непреднамеренно, неявное преобразование не разрешено.