You need to determine the scale and accuracy for the decimal places in the table variable.
eg.
DECLARE @Nov TABLE( custCode VARCHAR(10), PromiseAvg decimal(18,8), ShipAvg decimal(18,8) )
or any scale and accuracy is right for you. I just tested it on SQL Server 2008 and looks like decimal(18,0) by default, unless specified in the create table statement.
Also do the same with your cast s
... isnull(AVG(Cast(DATEDIFF(dd, ISNULL(startDate, 0), ISNULL(PromiseDate, 0)) As decimal(18,8))),0) As PromiseAvg, ....
source share