Измените один из литералов на десятичный:
decimal avg = p.Value * 100m / 10000;
Теперь, чтобы объяснить, почему это работает:
Позволяет обрабатывать исходную строку по одной операции за раз, подставляя 1 вместо p. Значение:
decimal avg = 1 * 100 / 10000; // int multiplication
decimal avg = 100 / 10000; // int division, remainder tossed out
decimal avg = (decimal) 0; // implicit cast
Теперь изменив значение 100 на 100 м:
decimal avg = 1 * 100m / 10000; // decimal multiplication
decimal avg = 100m / 10000; // decimal division
decimal avg = 0.01m;