следующий код
string s = "40.00";
decimal d = (decimal)Convert.ChangeType(s, typeof(decimal));
делает d = 40. Это выглядит хорошо для меня. В чем ваша проблема?
Edit:
Кажется, у вас могут быть проблемы с используемой культурой.
Сделайте это для конвертации:
string s = "40.00";
decimal d = (decimal)Convert.ChangeType(s, typeof(decimal), CultureInfo.InvariantCulture);