¿Cómo se lanza un doublea decimalque se usa cuando se hace el desarrollo de la moneda? ¿A dónde Mva?
decimal dtot = (decimal)(doubleTotal);
    Solo usa Mpara un literal numérico, cuando lanza es solo:
decimal dtot = (decimal)doubleTotal;
Tenga en cuenta que un número de punto flotante no es adecuado para mantener un valor exacto, por lo que si primero suma números y luego convierte a Decimal, puede obtener errores de redondeo. Es posible que desee convertir los números Decimalantes de sumarlos, o asegurarse de que los números no sean números de punto flotante en primer lugar.
Puede convertir un doble a un decimal como este, sin necesidad del
Msufijo literal:double dbl = 1.2345D; decimal dec = (decimal) dbl;Debe usar el
Mal declarar un nuevo valor decimal literal:decimal dec = 123.45M;(Sin el
M, 123.45 se trata como un doble y no se compilará).fuente
use la clase de conversión predeterminada:
Convert.ToDecimal(Double)fuente
Convert.ToDecimal(the double you are trying to convert);fuente
doubleadecimal, dado que para undoublevalor como (1000000.0 / 3.0) uno lo haría en algunos casos desea recortar el "exceso" de precisión dando 333333.333333333D, pero en otros casos uno querría retenerlo, dando 333333.333333333313931D. En lugar de simplemente decir "convertir a decimal", el código debe especificar cómo se debe realizar esa conversión.Convert.ToDecimal(double)es el mismo que(decimal)doubleTotal, excepto que si sedoubleTotalcambia a un tipo diferente, probablemente evitaría un error en tiempo de compilación e introduciría un error en tiempo de ejecución más difícil de encontrar debido a un ToDecimal diferente se podría llamar a override. El operador de reparto es mucho más explícito ...Bueno, esta es una pregunta antigua y de hecho hice uso de algunas de las respuestas que se muestran aquí. Sin embargo, en mi escenario particular, era posible que el
doublevalor al que quería convertir adecimalmenudo fuera mayor quedecimal.MaxValue. Entonces, en lugar de manejar excepciones, escribí este método de extensión:public static decimal ToDecimal(this double @double) => @double > (double) decimal.MaxValue ? decimal.MaxValue : (decimal) @double;El enfoque anterior funciona si no quiere molestarse en manejar las excepciones de desbordamiento y si tal cosa sucede, solo desea mantener el valor máximo posible (mi caso), pero soy consciente de que para muchos otros escenarios este no sería el comportamiento esperado y puede ser la excepción será necesaria la manipulación.
fuente