Pregunta

Si esto se habló anteriormente, lo siento, tuve un tiempo duro en busca de esto.

Estoy calculando una tasa de depreciación. Una porción de nuestro cálculo es 1 / vida en meses. Mi mesa almacena estos datos en un campo decimal. Probé test = 1 / estimatedLife; pero el resultado del cálculo de test (que se define como un decimal) es 0.

Diga la vida estimada es de 36 meses. Así 1/36 debe ser igual a 0,02777778.

¿Alguna idea de lo que estoy haciendo mal?

Por cierto, me cambió el test a un doble y tenía el mismo resultado.

¿Fue útil?

Solución

intento:

test = 1.0M / estimatedLife;

Otros consejos

Otra alternativa incorporado es Decimal.Divide :

test = Decimal.Divide(1, estimatedLife);

Más de escribir, pero bastante explícita diría.

Su código divide dos números enteros, a continuación, asigna el resultado (que es también un número entero) a una variable decimal.

Es necesario cambiar a la división decimal haciendo que al menos uno de los operandos una decimal, así:. 1.0M / estimatedLife

estimatedLife es un int, ¿no es así. Prueba esto:

    decimal test = 1 / (decimal) estimatedLife;

o utilizar la sugerencia de SwDevMan81:

    test = 1.0M / estimatedLife;

El problema es que la división entera tira a la basura todo lo que después del punto decimal. Uno de los argumentos tiene que haber un decimal para que usted pueda obtener el resultado deseado.

El enlace de documentación que registró en un comentario dice:

  

Si quieres un literal numérico real, a ser tratados como decimal, utilice el sufijo mo M

so 1,0 M significa "un literal de tipo decimal con el valor de 1,0"

sólo para añadir, si se requiere una precisión específica (Noté que su salida se establece en lugares decimales 8) se puede utilizar

decimal test = Math.Round(1M / estimatedLife,8);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top