Hay dos conceptos importantes para entender en esta situación.
- Valores literales
- conversión implícita
Esencialmente lo que están pidiendo es si un valor literal se puede convertir implícitamente entre los 2 tipos. El compilador realmente hará esto por usted en algunos casos cuando no haya pérdida de precisión. Tome este por ejemplo:
long n = 1000; // Assign an Int32 literal to an Int64.
Esto es posible porque un long
(Int64) contiene una mayor gama de valores en comparación con un int
(Int32). Para su ejemplo específico, es posible perder precisión. Aquí están los rangos drásticamente diferentes para decimal
y double
.
Decimal: ±1.0 × 10−28 to ±7.9 × 1028
Double: ±5.0 × 10−324 to ±1.7 × 10308
Con el conocimiento queda claro por qué una conversión implícita es una mala idea. Aquí hay una lista de conversiones implícitas que el compilador C# actualmente admite. Te recomiendo que hagas un poco de lectura ligera sobre el tema.
Implicit Numeric Conversions Table
@slaks: ¿cuál es la forma correcta de initiliazing un decimal? –
La forma en que lo hizo, con un sufijo 'M'. – SLaks
@jenny, solo para adelantarse a la siguiente pregunta, 'double d = 1/2' es igual a 0. Piense en por qué en el contexto de esta pregunta y respuesta. –