Еще одна заметка, которая еще не упомянута в других ответах.
Линия ...
float result = (float)received/target;
... сначала приводит к получению (float), а затем делит на целочисленное значение. Я не знаю об остальных вас, но я не знаю, что компилятор делает с этим. Я должен был бы искать это.
С другой стороны, я знаю, что делает компилятор, когда вы делите int на int или float на float, ... не просматривая его.
Итак. Ради будущих читателей вашего кода я призываю вас переформулировать вашу строку кода как int-by-int или float-by-float. Если вы имеете в виду float-by-float, то будущая читательская строка будет легче понять:
float result = (float) received / (float) target;