Это невозможно. Не все десятичные числа представимы во float.
Прошу прощения но я приведу пример на Java. Там есть нужный API для шагания по float вверх и вниз по оси.
Возможно таковой есть в Python но это щас не важно. Важна суть.
float f = 59131.999999999985f;
double d = 59131.999999999985;
System.out.printf("From float : %.12f\n", f);
System.out.printf("From double : %.12f\n", d);
System.out.printf("Next upper float from f = %.12f\n", Math.nextUp(f));
System.out.printf("Next down float from f = %.12f\n", Math.nextDown(f));
в выводе видно что данное десятичное число не представимо во float. Ближайшее 32х разрядное сверху это 59132.003906250000 а ближайшее снизу это 59131.996093750000 и конвертер из текстового формата в float32 совершенно верно выбрал 59132.000000000000 так как оно наиболее близко аппроксимирует исходные данные.
From float : 59132.000000000000
From double : 59131.999999999985
Next upper float from f = 59132.003906250000
Next down float from f = 59131.996093750000
double точнее кодирует десятичные числа но тоже несовершенен. Вообще если вы заняты бухгалтерией то берите специальные финаносвые типы или символьные наподобие тех что используют математические пакеты.
Деньги кодировать во float / double нельзя. Будут необъяснимые потери.