2010-08-05 13 views
18

tengo el siguiente fragmento de código:calidad-precio era demasiado grande o demasiado pequeño para un decimal

double shortfall = GetSomeNumber(); //3.3588548831176006E+29 

if (shortfall > 0) 
{ 
    returnValue = Convert.ToDecimal(shortfall); 
} 

que genera el error anterior.

¿Alguien me puede ayudar con eso, por favor?

+0

Recibí este error al intentar convertir el resultado de un número dividido entre 0, lo que da como resultado el infinito, por lo que no se puede convertir a decimal. –

Respuesta

21

Bueno, es bastante autoexplicativo.

decimal.MaxValue es 79,228,162,514,264,337,593,543,950,335 - su número es mayor que este.

Aunque decimal tiene una precisión más fina que double, double tiene una gama más grande, puede manejar números muy, muy grandes y muy, muy pequeños.

Ahora, si pudiera decirnos lo que realmente está tratando de hacer, podríamos tratar de ayudar a encontrar una solución ... rara vez es una buena idea mezclar double y decimal, para ser honesto.

+0

Gracias Jon, estoy construyendo un motor de cálculo y necesito acceso a Math.Pow que solo usa dobles. Convertir de nuevo a decimal para fines de visualización. Cualquier puntero sería genial. – Burt

+1

@Burt: si simplemente lo muestra, ¿por qué no muestra una representación de cadena? – Oded

+2

@Burt: ¿Qué tipo de poder estás usando? Es * relativamente * raro usar poderes no enteros para el IME 'decimal'. Para las potencias enteras, simplemente puedes repetir y multiplicar :) –

6

Significa que el valor devuelto no se puede convertir a decimal ya que es demasiado grande.

Decimal valores pueden ser entre positivo a negativo 79.228.162.514.264.337.593.543.950.335 79.228.162.514.264.337.593.543.950.335 - ver MSDN.

Double puede manejar números mucho más grandes - negativo 1.79769313486232e308 a positivo 1.79769313486232e308. No todos serán convertibles a Decimal.

Cuestiones relacionadas