Проблема со всеми ответами состоит в том, что умножение, а затем деление приводит к проблемам точности, потому что вы использовали деление. Я узнал это давным-давно из программирования на PDP8.
Способ решить эту проблему:
return roundf(number * 100) * .01;
Таким образом, 15,6578 возвращает только 15,66, а не 15,6578999 или что-то непредвиденное.
Какой уровень точности вы хотите, зависит от вас. Просто не делите продукт, умножьте его на десятичный эквивалент.
Не требуется смешное преобразование строк.