El calculo parece estar bien, pero la verdad no se entiende porque tomas los valores del Session, cuando en realidad estas usando los valores de la BD.
Si te sirve de algo yo trato de evitar pasar valores por Session por los problemas conocidos que tiene el IIS.
Saludos.