Разбиение по «методу Пугаева» или «разность округлённых значений»

Разработчикам часто приходиться сталкиваться с задачей, когда нужно некую сумму S, распределить между строками, пропорционально некому значению Q в этой строке и записать в F. Как она решается? Для каждой строки F = ROUND( Q * S /SUM(Q) ) ;      где   S /SUM(Q) – цена одной штуки. Проблема в том, что при округлении, теряются или появляются …