Valor decimal es cero cuando debería ser 0.0x
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.
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);