Because @sql is varchar, @i must also be varchar when constructing your dynamic sql string.
The following should resolve your problem
declare @i as numeric(18,0)
declare @sql as varchar(8000)
set @i =4
set @sql ='select top '+ CAST(@i AS VARCHAR) + ' * from dbo.tbl_ls_feed_data'
exec(@sql)