2011-05-15 10 views

Respuesta

38

Sólo se utiliza el M para un literal numérico, cuando lanzas que es justo:

decimal dtot = (decimal)doubleTotal; 

Tenga en cuenta que un número de coma flotante no es adecuado para mantener un valor exacto, así que si usted añade por primera vez números juntos y luego convertir a Decimal puede obtener errores de redondeo. Es posible que desee convertir los números al Decimal antes de agregarlos, o asegúrese de que los números no sean números de punto flotante en primer lugar.

+0

como pregunta de seguimiento, ¿por qué es necesaria la conversión explícita? Lo probé y recibí el error de que un doble no se puede convertir explícitamente en un decimal, ¿pero un decimal no tiene más precisión? (es decir, muy similar a la conversión de un int a un doble puede ser implícita). –

+0

@Cortana: la precisión de un decimal es mayor, pero el rango es menor. Un valor doble puede estar fuera del rango de un decimal. Ver: http://stackoverflow.com/questions/7817866/why-cant-double-be-implicitly-cast-to-decimal – Guffa

19

su uso en clase convertation defecto: Convert.ToDecimal(Double)

+0

No porque arrojará una OverflowException doble vol_y = (doble) Decimal.MaxValue + 10E + 28D; Console.WriteLine ("Convert.ToDecimal (vol_y) =" + Convert.ToDecimal (vol_y)); – ToXinE

18

puede convertir un doble a un decimal como este, sin necesidad de la M sufijo literal:

double dbl = 1.2345D; 
decimal dec = (decimal) dbl; 

Se debe utilizar la M cuando se declara un nuevo decimal literal valor:

decimal dec = 123.45M; 

(Sin la M, 123.45 se trata como una doble y no se compilará.)

13
Convert.ToDecimal(the double you are trying to convert); 
+0

Realmente, ¿estás sugiriendo una llamada a un método Convert en lugar de un operador de conversión? –

+1

He aprendido que la clase Convert es mucho más flexible y segura que un elenco en C#. – Tom

+1

"Seguro"? como en cuando no puede emitir arroja una excepción en tiempo de ejecución en lugar de un error de compilación? Me han mordido tantas veces que evito convertir ... –

Cuestiones relacionadas